Byr*_*ang 5 apache-spark spark-streaming
我正在为 Spark Streaming 作业构建指标系统,在系统中,指标是在每个执行器中收集的,因此需要在每个执行器中初始化指标源(用于收集指标的类)。
指标源被打包在一个jar中,提交作业时,使用参数“--jars”将jar从本地发送到每个执行器,但是,执行器在jar到达之前就开始初始化指标源类,作为结果,它抛出类未找到异常。
看来如果执行者可以等到所有资源都准备好,问题就会解决,但我真的不知道该怎么做。
有人面临同样的问题吗?
PS:我尝试使用HDFS(将jar复制到HDFS,然后提交作业并让执行器从HDFS中的路径加载类),但失败了。我检查了源代码,似乎类加载器只能解析本地路径。
这是日志,你可以看到jar是在2016-01-15 18:08:07添加到classpath的,但是初始化是在2016-01-15 18:07:26开始的
信息 2016-01-15 18:08:07 org.apache.spark.executor.Executor:添加文件:/var/lib/spark/worker/worker-0/app-20160115180722-0041/0/./datainsights-metrics -source- assembly-1.0.jar 到类加载器
错误 2016-01-15 18:07:26 Logging.scala:96 - org.apache.spark.metrics.MetricsSystem:源类 org.apache.spark.metrics.PerfCounterSource 无法实例化
这是我使用的命令:
spark-submit --verbose \
--jars /tmp/datainsights-metrics-source-assembly-1.0.jar \
--conf "spark.metrics.conf=metrics.properties" \
--class org.microsoft.ofe.datainsights.StartServiceSignalPipeline \
./target/datainsights-1.0-jar-with-dependencies.jar
Run Code Online (Sandbox Code Playgroud)
我可以想到几个选项:-
SparkConf.setJars(....),或者如果驱动程序也使用它,那么您还可以使用命令行选项--driver-class-path来配置驱动程序类路径。尝试使用以下参数在 Spark-default.conf 中配置它:-
spark.executor.extraClassPath=<classapth>
spark.executor.extraClassPath=<classapth>
Run Code Online (Sandbox Code Playgroud)无论你做什么,我都建议修复网络延迟,否则会损害 Spark 作业的性能。
| 归档时间: |
|
| 查看次数: |
2777 次 |
| 最近记录: |