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



我正在尝试将以下作业提交到我的集群,使用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-examples2.12-3.0.0.jar"}],";sandbox_directory":"var/lib/mesos/slavens/b61fd963-8537-48f0-9eb6-e26f3aa97265-S0/框架/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 8587fetcher.cpp:332]正在复制,而不是使用从URI提取资源"extract"标志,因为它似乎不是存档:/spark-3.0.0-bin-SparkFHE/examples/jars/spark-examples_2.12-3.0.0.jarI0916 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/meso/slavens/b61fd963-8537-48f0-9eb6-e26f3aa97265-S0/frameworks/92ca9c69-72c9-43d1-828e-ecc8bac62eff-0000/executors/doriver-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/meso/slavens/b61fd963-8537-48f0-9eb6-e26f3aa97265-S0/框架/92ca9c69-72c9-43d1-828e-ecc8bac62eff-0000/executors/doriver-20200916212624-0041/runs/46a1e00e-0c01-47b5-82f5-a46ba52372321"I0916 21:26:23.374958 8598 exec.cpp:164]版本:1.9.0 I091621:26:23.387948 8614 exec.cpp:237]在代理上注册的执行程序b61fd963-8537-48f0-9eb6-e26f3aa97265-S0 I0916 21:26:23.390528 8604executor.cpp:190]收到SUBSCRIBED事件I0916 21:26:23.3913268604 executor.cpp:194]已在worker4 I0916上订阅executor21:26:23.391512 8604 executor.cpp:190]收到LAUNCH事件I091621:26:23.392763 8604 executor.cpp:722]正在启动任务驾驶员-20200916212624-0041 I0916 21:26:23.409191 8604executor.cpp:738]在8622分叉命令2016年9月20日21:26:25警告NativeCodeLoader:无法为您的站台在适用的情况下使用内置java类使用Spark默认log4j配置文件:org/apache/spark/log4j-defaults.properties2016年9月20日21:26:25警告DependencyUtils:Local jar/var/lib/mesos/slavens/b61fd963-8537-48f0-9eb6-e26f3aa97265-S0/frameworks/92ca9c69-72c9-43d1-828e-ecc8bac62eff-0000/executors/driver-20200916212624-0041/runs/46a1e00e-0c1-47b5-82f5-a46ba5237321/spark.driver.supervisor=false不存在,正在跳过。错误:未能加载类org.apache.spark.examples.ParkPi.20/09/16 21:26:25信息ShutdownHookManager:调用了Shutdownhook 20/09/16 21:26:25 INFOShutdownHookManager:正在删除目录/tmp/spark-0c04f617-9daf-4b-8efe-e7d48e1eb06f I0916 21:26:25.8029458601 executor.cpp:1039]命令退出,状态为101(pid:8622)I0916 21:26:26.809671 8619 process.cpp:935]已停止套接字接受环路

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

2016年9月20日21:26:25 WARN DependencyUtils:本地jar/var/lib/mesos/slavens/b61fd963-8537-48f0-9eb6-e26f3aa97265-S0/frameworks/92ca9c69-72c9-43d1-828e-ecc8bac62eff-0000/executors/driver-20200916212624-0041/runs/46a1e00e-0c1-47b5-82f5-a46ba5237321/spark.driver.supervisor=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。不确定为什么打开此选项。

此外,我尝试在函数"中进行调试;def doSubmit(args:Array[String])"SparkSubmit.scala.内

我试图打印args数组。

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

不知何故,以下内容包含在--py-files中,没有任何值。

这是3.0.0中的一个bug,在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文件传递给spark-submit,它也会被附加。我将PR应用于3.0.1源代码,并重建了发行版,这为我解决了问题。

以下是我所做的:

  1. 编辑资源管理器/meso/src/main/scala/org/apache/spark/scheduler/cluster/MesosClusterScheduler.scala

替换538:行

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

带有:

if (!formattedFiles.equals("")) {
options ++= Seq("--py-files", formattedFiles)
}
  1. 编辑资源管理器/meso/src/test/scala/org/apache/spark/scheduler/cluster/meso/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

最新更新