【发布时间】:2016-01-15 09:20:43
【问题描述】:
我正在使用以下命令提交 Spark 作业,我希望将 jar 和 config 文件发送到每个执行器并加载到那里
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 是用来发送文件给executors的,我发现文件是发送到executor的工作目录的,比如'worker/app-xxxxx-xxxx/0/
但是当作业运行时,执行器总是抛出异常,说它找不到文件'metrics.properties'或'datainsights-metrics-source-assembly-1.0.jar'中包含的类。该作业似乎是在另一个目录而不是工作目录下寻找文件。
你知道如何加载发送给执行者的文件吗?
这里是跟踪(类 '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]
【问题讨论】:
标签: apache-spark spark-streaming