我有一个spark(spark1.5.2)应用程序,它将数据从kafka流到hdfs。我的应用程序包含两个typesafe配置文件来配置某些东西,比如kafka主题等。
现在我想在集群中使用spark submit(集群模式)运行我的应用程序。包含项目所有依赖项的jar文件存储在hdfs上。只要我的配置文件包含在jar文件中,一切都正常。但是这对于测试来说是不现实的,因为我总是要重建jar。
因此,我排除了我的项目的配置文件,并通过“驱动程序类路径”添加它们。这在客户机模式下工作,但是如果我现在将配置文件移动到hdfs并在集群模式下运行我的应用程序,它就找不到设置。您可以在下面找到我的spark submit命令:
/usr/local/spark/bin/spark-submit \
--total-executor-cores 10 \
--executor-memory 15g \
--verbose \
--deploy-mode cluster\
--class com.hdp.speedlayer.SpeedLayerApp \
--driver-class-path hdfs://iot-master:8020/user/spark/config \
--master spark://spark-master:6066 \
hdfs://iot-master:8020/user/spark/speed-layer-CONFIG.jar
我已经用--file参数试过了,但也没用。有人知道我怎么解决这个问题吗?
更新:
我做了一些进一步的研究,我发现它可能与hdfs路径有关。我将hdfs路径更改为“hdfs:///iot”-master:8020//user//spark//config 但不幸的是,这也没有起作用。但也许这能帮你。
下面您还可以看到在群集模式下运行驱动程序时出现的错误:
Exception in thread "main" java.lang.reflect.InvocationTargetException
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:497)
at org.apache.spark.deploy.worker.DriverWrapper$.main(DriverWrapper.scala:58)
at org.apache.spark.deploy.worker.DriverWrapper.main(DriverWrapper.scala)
Caused by: java.lang.ExceptionInInitializerError
at com.speedlayer.SpeedLayerApp.main(SpeedLayerApp.scala)
... 6 more
Caused by: com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'application'
at com.typesafe.config.impl.SimpleConfig.findKey(SimpleConfig.java:124)
at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:145)
at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:159)
at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:164)
...
2条答案
按热度按时间1u4esq0p1#
为了达到同样的效果,我发现了以下几点:
--文件:仅与运行spark submit命令的计算机上的本地文件关联,并转换为
conf.addFile()
. 因此,除非您能够运行hdfs dfs -get <....>
在检索文件之前。在我的情况下,我想从oozie运行它,所以我不知道它将在哪台机器上运行,我不想添加一个复制文件的行动,我的工作流程。引用@yuval_itzchakov take是指--jars,它只处理jar,因为它转换为
conf.addJar()
因此,据我所知,从hdfs加载配置文件是不可能的。我的方法是将路径传递给我的应用程序,读取配置文件并将其合并到引用文件中:
p、 这个错误只意味着configfactory没有找到任何配置文件,所以他找不到您要查找的属性。
cqoc49vn2#
一种选择是使用
--files
使用hdfs位置标记和,并确保使用spark.executor.extraClassPath
标记为-Dconfig.file
:spark使用以下url方案来允许使用不同的策略来传播JAR:
file:-绝对路径和file:/uri由驱动程序的http文件服务器提供服务,每个执行器从驱动程序http服务器提取文件。
hdfs:、http:、https:、ftp:-这些文件和jar按预期从uri中下拉
local:-以local:/开头的uri应作为本地文件存在于每个工作节点上。这意味着不会产生网络io,对于推送到每个worker或通过nfs、glusterfs等共享的大型文件/jar来说效果很好。
另外,您可以在查看的帮助文档时看到它
spark-submit
:使用spark submit运行: