我正在构建一个在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文件所在的目录中。
答案 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
不是必需的,它可以解决您的问题。但是这里只是尝试使用另一种方法。