我有一个从配置文件读取数据的 Spark 作业。该文件是类型安全的配置文件。
读取配置的代码如下所示:
ConfigFactory.load().getConfig("com.mycompany")
现在我不将 application.conf 组装为我的 uber jar 的一部分,因为我想将该文件作为外部文件传递
我想使用的外部 application.conf 的内容如下所示:
com.mycompany {
//configurations my program needs
}
此 application.conf 文件存在于我的本地计算机文件系统上(而不是 HDFS 上)
我正在使用 Spark 1.6.1 和 Yarn
这就是我的 Spark-submit 命令的样子:
LOG4J_FULL_PATH=/log4j-path
ROOT_DIR=/application.conf-path
/opt/deploy/spark/bin/spark-submit \
--class com.mycompany.Main \
--master yarn \
--deploy-mode cluster \
--files $ROOT_DIR/application.conf \
--files $LOG4J_FULL_PATH/log4j.xml \
--conf spark.executor.extraClassPath="-Dconfig.file=file:application.conf" \
--driver-class-path $ROOT_DIR/application.conf \
--verbose \
/opt/deploy/lal-ml.jar
我收到的异常是:
2016-11-09 12:32:14 ERROR ApplicationMaster:95 - User class threw exception: com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'com'
com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'com'
at com.typesafe.config.impl.SimpleConfig.findKey(SimpleConfig.java:124)
at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:147)
at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:159)
at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:164)
at com.typesafe.config.impl.SimpleConfig.getObject(SimpleConfig.java:218)
at com.typesafe.config.impl.SimpleConfig.getConfig(SimpleConfig.java:224)
at com.typesafe.config.impl.SimpleConfig.getConfig(SimpleConfig.java:33)
at com.mycompany.Main$.main(Main.scala:36)
at com.mycompany.Main.main(Main.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.spark.deploy.yarn.ApplicationMaster$$anon$2.run(ApplicationMaster.scala:542)
所以我的问题是:有人知道如何使用spark-submit和yarn加载位于本地计算机上的外部类型安全application.conf文件吗?
我尝试遵循中的一些解决方案如何将位于 HDFS 上的类型安全配置文件添加到 Spark-Submit(集群模式)? https://stackoverflow.com/questions/35509510/how-to-add-a-typesafe-config-file-which-is-located-on-hdfs-to-spark-submit-clus and in Spark 中的类型安全配置 https://stackoverflow.com/questions/38068927/typesafe-config-in-spark并且也在如何将-D参数或环境变量传递给Spark作业? https://stackoverflow.com/questions/28166667/how-to-pass-d-parameter-or-environment-variable-to-spark-job但没有任何作用
我将不胜感激任何解决这个问题的方向
提前致谢