我正在尝试将以下作业提交到我的集群,使用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源代码,并重建了发行版,这为我解决了问题。
以下是我所做的:
- 编辑资源管理器/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)
}
- 编辑资源管理器/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 " +
- 使用重建/dev/make-distribution.sh--tgz-Pmesos