Gid*_*eon 6 scala hadoop-yarn typesafe-config apache-spark
我有一个Spark作业,从配置文件中读取数据.此文件是类型安全的配置文件.
读取配置的代码如下所示:
ConfigFactory.load().getConfig("com.mycompany")
Run Code Online (Sandbox Code Playgroud)
现在我没有将application.conf作为我的超级jar的一部分进行组装,因为我想将该文件作为外部文件传递
我想使用的外部application.conf的内容如下所示:
com.mycompany {
//configurations my program needs
}
Run Code Online (Sandbox Code Playgroud)
此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
Run Code Online (Sandbox Code Playgroud)
我收到的例外是:
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)
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:有没有人知道如何加载一个外部类型安全的application.conf文件,该文件位于我的本地机器上,带有spark-submit和yarn?
我尝试了如何添加一个位于HDFS上的类型安全配置文件到spark-submit(集群模式)的解决方案?和Spark中的Typesafe配置以及如何将-D参数或环境变量传递给Spark作业?没有任何效果
我会很感激解决这个问题的任何方向
提前致谢
因此,通过对Spark 1.6.1源代码的一点挖掘,我找到了解决方案.
这些是您在使用集群模式提交到yarn时使用log4j和application.conf所需的步骤:
--files "$ROOT_DIR/application.conf,$LOG4J_FULL_PATH/log4j.xml"用逗号分隔它们)--conf spark.driver.extraJavaOptions="-Dlog4j.configuration=file:log4j.xml"- 请注意,一旦您使用--files传递它,您只需引用文件名而无需任何路径注意:我没有尝试过,但是从我看到的,如果你试图在客户端模式下运行它我认为该spark.driver.extraJavaOptions行应该重命名为类似driver-java-options的东西.这么简单,我希望这些东西能更好地记录下来.我希望这个答案会对某人有所帮助
干杯
| 归档时间: |
|
| 查看次数: |
5502 次 |
| 最近记录: |