我正在为Spark Streaming作业构建指标系统,在系统中,指标收集在每个执行程序中,因此需要在每个执行程序中初始化指标源(用于收集指标的类)。
度量源被打包在一个jar中,当提交作业时,jar使用参数'--jars'从本地发送到每个执行器,但是,执行器在jar到达之前开始初始化度量源类,因此,它会抛出类未找到异常。
似乎如果执行者可以等到所有资源都准备好,问题就会得到解决,但我真的不知道该怎么做。
有人面临同样的问题吗?
PS:我尝试使用HDFS(将jar复制到HDFS,然后提交作业并让执行器从HDFS中的路径加载类),但它失败了。我查了一下源代码,看来类装入器只能解析本地路径。
这是日志,您可以看到jar在2016-01-15 18:08:07添加到classpath中,但初始化在2016-01-15 18:07:26开始
INFO 2016-01-15 18:08:07 组织 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 . metrics system:无法实例化源类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
我可以想到几个选项:-
>
SparkConf.setJars(....)
显式添加 jar 文件,或者如果它也由驱动程序使用,则还可以使用命令行选项 --驱动程序类路径
来配置驱动程序类路径。尝试使用以下参数在 Spark-default.conf 中对其进行配置: -
spark.executor.extraClassPath=<classapth>
spark.executor.extraClassPath=<classapth>
无论你做什么,我都会建议修复网络延迟,否则会伤害Spark jobs的性能。
我使用IntelliJ创建了一个sbt项目。我将所需的jdbc jar复制到项目的文件夹中。成功完成。在Windows上,我通过启动了spark。 但是,以下命令得到了错误。
我使用IntelliJ创建了一个sbt项目。我在项目的文件夹中复制了所需的jdbc jar。已成功完成。我在Windows上通过启动了spark。 但是,下面的命令得到了错误。 更新:spark代码可以工作,如果我直接在spark shell中运行语句,我可以看到表内容。 更新2:运行时确实显示了以下消息 17/05/15 16:12:30 INFO SparkContext:添加了JAR文件:/
在Spark文档中提交应用程序时,从1.6.0到更早的版本,不清楚如何指定--jars参数,因为它显然不是冒号分隔的类路径,也不是目录扩展。 文档中说:“包含应用程序和所有依赖项的捆绑jar的路径。URL必须在集群中全局可见,例如,所有节点上都存在的hdfs://路径或file://路径。” 问题:在$spark_home/bin中的spark-submit脚本中使用--jars提交类路径的所有选
我正在尝试使用bin/spark-submit运行一个spark应用程序。当我引用本地文件系统中的应用程序jar时,它会正常工作。但是,当我将我的应用程序jar复制到hdfs中的一个目录时,我得到了以下异常: 我使用的是hadoop版本2.6.0和spark版本1.2.1
我通过python API使用spark V2.4.4 null null null
有人能解释一下spark-submit脚本中的和之间的区别吗? 另外,如果依赖项在应用程序中,我是否需要配置?(我这样问是因为我在中更改了版本,而忘记在中更改了它,这使我的应用程序崩溃了)