如何在执行程序

时间:2016-01-13 15:51:53

标签: apache-spark spark-streaming

我使用以下命令提交Spark作业,我希望将jar和配置文件发送给每个执行程序并将其加载到那里

spark-submit --verbose \
--files=/tmp/metrics.properties \ 
--jars /tmp/datainsights-metrics-source-assembly-1.0.jar \ 
--total-executor-cores 4\
--conf "spark.metrics.conf=metrics.properties" \
--conf "spark.executor.extraClassPath=datainsights-metrics-source-assembly-1.0.jar"  \
--class org.microsoft.ofe.datainsights.StartServiceSignalPipeline \
./target/datainsights-1.0-jar-with-dependencies.jar

- files和--jars用于向执行者发送文件,我发现文件被发送到执行者的工作目录,如&worker; app / xxxxx-xxxx / 0 /

但是当作业正在运行时,执行程序总是会抛出异常,说它无法找到文件' metrics.properties'或者包含在'datainsights-metrics-source-assembly中的类-1.0.jar&#39 ;.似乎这项工作是在另一个目录而不是工作目录下寻找文件。

您知道如何加载发送给执行者的文件吗?

这是跟踪(类' org.apache.spark.metrics.PerfCounterSource'包含在jar' datainsights-metrics-source-assembly-1.0.jar') :

ERROR 2016-01-14 16:10:32 Logging.scala:96 - org.apache.spark.metrics.MetricsSystem: Source class org.apache.spark.metrics.PerfCounterSource cannot be instantiated
java.lang.ClassNotFoundException: org.apache.spark.metrics.PerfCounterSource
at java.net.URLClassLoader$1.run(URLClassLoader.java:366) ~[na:1.7.0_80]
at java.net.URLClassLoader$1.run(URLClassLoader.java:355) ~[na:1.7.0_80]
at java.security.AccessController.doPrivileged(Native Method) [na:1.7.0_80]
at java.net.URLClassLoader.findClass(URLClassLoader.java:354) ~[na:1.7.0_80]
at java.lang.ClassLoader.loadClass(ClassLoader.java:425) ~[na:1.7.0_80]
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) ~[na:1.7.0_80]
at java.lang.ClassLoader.loadClass(ClassLoader.java:358) ~[na:1.7.0_80]
at java.lang.Class.forName0(Native Method) ~[na:1.7.0_80]
at java.lang.Class.forName(Class.java:195) ~[na:1.7.0_80]

1 个答案:

答案 0 :(得分:0)

看起来你的--jars参数中有一个拼写错误,所以可能是它实际上没有加载文件而是继续静默。