错误:无法在Spark + Mesos集群上加载类

时间:2020-09-17 16:13:59

标签: apache-spark

我正在尝试使用Spark 3.0.0和Mesos 1.9将以下作业提交到我的集群。

./bin/spark-submit \
        --name test2 \
        --master mesos://master:7077 \
        --deploy-mode cluster \
        --class org.apache.spark.examples.SparkPi \
        --conf spark.master.rest.enabled=true \
        ./examples/jars/spark-examples_2.12-3.0.0.jar 100

但是,我收到以下错误消息。

I0916 21:26:23.155861 8587 fetcher.cpp:562] Fetcher信息: {“ cache_directory”:“ / tmp / mesos / fetch / root”,“ items”:[{“ action”:“ BYPASS_CACHE”,“ uri”:{“ cache”:false,“ extract”:true,“ value” :“ / spark-3.0.0-bin-SparkFHE / examples / jars / spark-examples_2.12-3.0.0.jar”}}],“ sandbox_directory”:“ // var / lib / mesos / slaves / b61fd963-8537 -48f0-9eb6-e26f3aa97265-S0 / frameworks / 92ca9c69-72c9-43d1-828e-ecc8bac62eff-0000 / executors / driver-20200916212624-0041 / runs / 46a1e00e-0c01-47b5-82f5-a46ba5237321“,” stall_timeout“:{纳秒”:60000000000},“用户”:“根”} I0916 21:26:23.165118 8587 fetcher.cpp:459]正在获取URI '/spark-3.0.0-bin-SparkFHE/examples/jars/spark-examples_2.12-3.0.0.jar' I0916 21:26:23.165141 8587 fetcher.cpp:290]正在提取 '/spark-3.0.0-bin-SparkFHE/examples/jars/spark-examples_2.12-3.0.0.jar' 直接进入沙箱目录W0916 21:26:23.168915 8587 fetcher.cpp:332]复制而不是使用以下命令从URI中提取资源 '提取'标志,因为它似乎不是存档: /spark-3.0.0-bin-SparkFHE/examples/jars/spark-examples_2.12-3.0.0.jar I0916 21:26:23.168941 8587 fetcher.cpp:618]已取得 '/spark-3.0.0-bin-SparkFHE/examples/jars/spark-examples_2.12-3.0.0.jar' 至 '/ var / lib / mesos / slaves / b61fd963-8537-48f0-9eb6-e26f3aa97265-S0 / frameworks / 92ca9c69-72c9-43d1-828e-ecc8bac62eff-0000 / executors / driver-20200916212624-0041 / runs / 46a1e00e-0c01- 47b5-82f5-a46ba5237321 / spark-examples_2.12-3.0.0.jar' I0916 21:26:23.168957 8587 fetcher.cpp:623]已成功获取所有 URI到 '/ var / lib / mesos / slaves / b61fd963-8537-48f0-9eb6-e26f3aa97265-S0 / frameworks / 92ca9c69-72c9-43d1-828e-ecc8bac62eff-0000 / executors / driver-20200916212624-0041 / runs / 46a1e00e-0c01- 47b5-82f5-a46ba5237321' I0916 21:26:23.374958 8598 exec.cpp:164]版本:1.9.0 I0916 21:26:23.387948 8614 exec.cpp:237]执行人在代理人处注册 b61fd963-8537-48f0-9eb6-e26f3aa97265-S0 I0916 21:26:23.390528 8604 executor.cpp:190]已收到SUBSCRIBED事件I0916 21:26:23.391326 8604 executor.cpp:194]在worker4 I0916上订阅了执行者 21:26:23.391512 8604 executor.cpp:190]收到启动事件I0916 21:26:23.392763 8604 executor.cpp:722]启动任务 驱动程序-20200916212624-0041 I0916 21:26:23.409191 8604 executor.cpp:738]在8622 20/09/16 21:26:25 WARN分叉的命令 NativeCodeLoader:无法为您的本地Hadoop库加载 平台...在适当的地方使用内建的Java类使用Spark的 默认的log4j配置文件:org / apache / spark / log4j-defaults.properties 20/09/16 21:26:25 WARN DependencyUtils:本地jar / var / lib / mesos / slaves / b61fd963-8537-48f0-9eb6-e26f3aa97265-S0 / frameworks / 92ca9c69-72c9-43d1-828e-ecc8bac62eff-0000 / executors / driver-20200916212624-0041 / runs / 46a1e00e-0c01-47b5 -82f5-a46ba5237321 / spark.driver.supervise = false 不存在,正在跳过。错误:无法加载课程 org.apache.spark.examples.SparkPi。 20/09/16 21:26:25 INFO ShutdownHookManager:关机钩称为20/09/16 21:26:25 INFO ShutdownHookManager:删除目录 / tmp / spark-0c04f617-9daf-4a4b-8efe-e7d48e1eb06f I0916 21:26:25.802945 8601 executor.cpp:1039]命令退出,状态为101(pid:8622) I0916 21:26:26.809671 8619 process.cpp:935]停止了套接字接受 循环

在上述错误消息中,我注意到尝试加载jar文件时在执行程序路径中引用了 spark.driver.supervise = false

16/09/20 21:26:25警告依赖实用程序:本地jar / var / lib / mesos / slaves / b61fd963-8537-48f0-9eb6-e26f3aa97265-S0 / frameworks / 92ca9c69-72c9-43d1-828e-ecc8bac62eff-0000 / executors / driver-20200916212624-0041 / runs / 46a1e00e-0c01-47b5 -82f5-a46ba5237321 / spark.driver.supervise = false 不存在,正在跳过。

我认为无法加载该类的问题是由于此错误的引用造成的。

有什么建议吗?

查看spark-submit的调试消息,发现以下内容。

Spark config:
(spark.jars,file:/spark-3.0.0-bin-SparkFHE/examples/jars/spark-examples_2.12-3.0.0.jar)
(spark.driver.supervise,false)
(spark.app.name,test2)
**(spark.submit.pyFiles,)**
(spark.master.rest.enabled,true)
(spark.submit.deployMode,cluster)
(spark.master,mesos://master:7077)
Classpath elements:

我注意到(spark.submit.pyFiles,)为空。我不打算使用python。不确定为什么打开此选项。

此外,我尝试在SparkSubmit.scala中的函数“ def doSubmit(args:Array [String])”中进行调试。

我试图打印args数组。

for (arg <- args) { logWarning(s"doSubmit: $arg") }

不知何故,--py-files包含以下内容。

1 个答案:

答案 0 :(得分:1)

这是3.0.0中的错误,并且在3.0.1中也存在。

https://issues.apache.org/jira/browse/SPARK-32675

应该在3.1.0版中进行了修复,该版本的RC目标为2021年1月https://spark.apache.org/versioning-policy.html

之所以会发生此问题,是因为即使您未将--py-files显式传递给spark-submit,也会附加--py-files。我将PR应用于3.0.1源,并重新构建了发行版,从而为我解决了这个问题。

这就是我所做的:

  1. 编辑resource-managers / mesos / src / main / scala / org / apache / spark / scheduler / cluster / mesos / MesosClusterScheduler.scala

替换第538行:

options ++= Seq("--py-files", formattedFiles)

使用:

if (!formattedFiles.equals("")) {
  options ++= Seq("--py-files", formattedFiles)
}
  1. 编辑resource-managers / mesos / src / test / scala / org / apache / spark / scheduler / cluster / mesos / MesosClusterManagerSuite.scala

替换第595行:

 "--driver-cores 1.0 --driver-memory 1000M --class Main --py-files  " +

使用:

"--driver-cores 1.0 --driver-memory 1000M --class Main " +
  1. 使用以下命令重建:./dev/make-distribution.sh --tgz -Pmesos