火花提交覆盖默认application.conf不起作用

时间:2020-04-23 20:40:32

标签: apache-spark

我正在构建一个在application.conf文件夹下有src/main/resources的jar。但是,我尝试在进行spark-submit时将其覆盖。但是,它不起作用。

以下是我的命令

$spark_submit $spark_params $hbase_params \
    --class com.abc.xyz.MYClass \
    --files application.conf \
    $sandbox_jar flagFile/test.FLG \
    --conf "spark.executor.extraClassPath=-Dconfig.file=application.conf"

application.conf-位于我的jar文件所在的目录中。

2 个答案:

答案 0 :(得分:0)

-Dconfig.file=path/to/config-file可能由于ConfigFactory上的内部缓存而无法工作。该文档建议运行ConfigFactory.invalidateCaches()

另一种方法是将提供的属性与可用的现有属性合并。

ConfigFactory.invalidateCaches()
val c = ConfigFactory.parseFile(new File(path-to-file + "/" + "application.conf"))
val config : Config = c.withFallback(ConfigFactory.load()).resolve

我认为重写属性的最好方法是使用-D提供属性。 Typesafe赋予系统属性最高的优先级,因此-D将覆盖reference.conf和application.conf。

答案 1 :(得分:0)

考虑application.conf是属性文件。还有其他选项,可以解决使用属性文件的相同目的。

不确定,但是用jar打包属性文件可能无法提供灵活性吗?在这里,将属性文件与jar包装分开可以保持灵活性,因为只要有任何属性更改,只要替换新的属性文件即可,而不是构建和部署整个jar。

这可以实现,因为将属性文件中的属性保留为属性键的前缀为“ spark”。

spark.inputpath /input/path
spark.outputpath /output/path

Spark Submit命令就像

$spark_submit $spark_params $hbase_params \
    --class com.abc.xyz.MYClass \
    --properties-file application.conf \
    $sandbox_jar flagFile/test.FLG 

通过类似的代码获取属性,

sc.getConf.get("spark.inputpath")       // /input/path
sc.getConf.get("spark.outputpath")      // /output/path

不是必需的,它可以解决您的问题。但是这里只是尝试使用另一种方法。