请,我需要您的帮助,我正在尝试使用typesafe config为我的spark应用程序提交外部配置文件。
我正在像这样在我的应用程序代码中加载application.conf文件:
lazy val conf = ConfigFactory.load()
文件内容
ingestion{
process {
value = "sas"
}
sas {
origin{
value = "/route"
}
destination{
value = "/route"
}
extension{
value = ".sas7bdat"
}
file{
value = "mytable"
}
month{
value = "201010,201011"
}
table{
value = "tbl"
}
}
}
我的火花提交是
spark2-submit --class com.antonio.Main --master yarn --deploy-mode client --driver-memory 10G --driver-cores 8 --executor-memory 13G --executor-cores 4 --num-executors 10 --verbose --files properties.conf /home/user/ingestion-1.0-SNAPSHOT-jar-with-dependencies.jar --files application.conf
但是由于某些原因,我收到了
com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'ingestion'
一切看起来都正确配置了?我错过了什么吗?
谢谢
安东尼奥
答案 0 :(得分:2)
默认情况下,application.conf
必须存在于类路径的根目录下,ConfigFactory.load()
才能找到它。另外,您可以通过系统属性修改在application.conf
文件中的查找位置。因此,您的选择如下。
第一种选择是,将作业的根目录添加到classpath:
spark2-submit ... \
--conf spark.driver.extraClassPath=./ \
--conf spark.executor.extraClassPath=./ \ // if you need to load config at executors
...
保持--files
选项不变。请注意,如果您在客户端模式下运行作业,则必须将正确的路径传递到application.conf
选项在驱动程序计算机上的位置spark.driver.extraClassPath
。
第二种选择是(我认为这是更好的选择),您可以使用config.file
系统属性来影响ConfigFactory.load()
在哪里寻找配置文件:
spark2-submit ... \
--conf spark.driver.extraJavaOptions=-Dconfig.file=./application.conf \
--conf spark.executor.extraJavaOptions=-Dconfig.file=./application.conf \
...
关于在执行程序上加载配置并保留--files
选项的说明也适用于此。