Apache spark “线程中的异常”;“主要”;org.apache.spark.SparkException:必须指定驱动程序容器映像
我正在尝试使用命令从本地机器CLI在minikube(Kubernetes)上执行spark提交Apache spark “线程中的异常”;“主要”;org.apache.spark.SparkException:必须指定驱动程序容器映像,apache-spark,docker,kubernetes,kubectl,minikube,Apache Spark,Docker,Kubernetes,Kubectl,Minikube,我正在尝试使用命令从本地机器CLI在minikube(Kubernetes)上执行spark提交 spark-submit --master k8s://https://127.0.0.1:8001 --name cfe2 --deploy-mode cluster --class com.yyy.Test --conf spark.executor.instances=2 --conf spark.kubernetes.container.image docker.io/anantpukal
spark-submit --master k8s://https://127.0.0.1:8001 --name cfe2
--deploy-mode cluster --class com.yyy.Test --conf spark.executor.instances=2 --conf spark.kubernetes.container.image docker.io/anantpukale/spark_app:1.1 local://spark-0.0.1-SNAPSHOT.jar
我有一个简单的基于verison 2.3.0的spark作业罐。我还在docker和minikube中进行了集装箱化,并在虚拟箱上运行。
下面是异常堆栈:
Exception in thread "main" org.apache.spark.SparkException: Must specify the driver container image at org.apache.spark.deploy.k8s.submit.steps.BasicDriverConfigurationStep$$anonfun$3.apply(BasicDriverConfigurationStep.scala:51) at org.apache.spark.deploy.k8s.submit.steps.BasicDriverConfigurationStep$$anonfun$3.apply(BasicDriverConfigurationStep.scala:51) at scala.Option.getOrElse(Option.scala:121) at org.apache.spark.deploy.k8s.submit.steps.BasicDriverConfigurationStep.<init>(BasicDriverConfigurationStep.scala:51)
at org.apache.spark.deploy.k8s.submit.DriverConfigOrchestrator.getAllConfigurationSteps(DriverConfigOrchestrator.scala:82)
at org.apache.spark.deploy.k8s.submit.KubernetesClientApplication$$anonfun$run$5.apply(KubernetesClientApplication.scala:229)
at org.apache.spark.deploy.k8s.submit.KubernetesClientApplication$$anonfun$run$5.apply(KubernetesClientApplication.scala:227)
at org.apache.spark.util.Utils$.tryWithResource(Utils.scala:2585)
at org.apache.spark.deploy.k8s.submit.KubernetesClientApplication.run(KubernetesClientApplication.scala:227)
at org.apache.spark.deploy.k8s.submit.KubernetesClientApplication.start(KubernetesClientApplication.scala:192)
at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:879)
at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:197)
at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:227)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:136)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) 2018-04-06 13:33:52 INFO ShutdownHookManager:54 - Shutdown hook called 2018-04-06 13:33:52 INFO ShutdownHookManager:54 - Deleting directory C:\Users\anant\AppData\Local\Temp\spark-6da93408-88cb-4fc7-a2de-18ed166c3c66
线程“main”org.apache.spark.sparkeexception中的异常:必须在org.apache.spark.deploy.k8s.submit.steps.BasicDriverConfigurationStep$$anonfun$3.apply(BasicDriverConfigurationStep.scala:51)org.apache.spark.deploy.k8s.submit.steps.BasicDriverConfigurationStep$$anonfun$3.apply中指定驱动程序容器映像(BasicDriverConfigurationStep.scala:51)位于org.apache.spark.deploy.k8s.submit.steps.BasicDriverConfigurationStep的scala.Option.getOrElse(Option.scala:121)
位于org.apache.spark.deploy.k8s.submit.DriverConfigOrchestrator.getAllConfigurationSteps(DriverConfigOrchestrator.scala:82)
位于org.apache.spark.deploy.k8s.submit.KubernetesClientApplication$$anonfun$run$5.apply(KubernetesClientApplication.scala:229)
位于org.apache.spark.deploy.k8s.submit.KubernetesClientApplication$$anonfun$run$5.apply(KubernetesClientApplication.scala:227)
位于org.apache.spark.util.Utils$.tryWithResource(Utils.scala:2585)
位于org.apache.spark.deploy.k8s.submit.KubernetesClientApplication.run(KubernetesClientApplication.scala:227)
位于org.apache.spark.deploy.k8s.submit.KubernetesClientApplication.start(KubernetesClientApplication.scala:192)
位于org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:879)
位于org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:197)
位于org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:227)
位于org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:136)
在org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)2018-04-06 13:33:52信息关闭钩子管理器:54-名为2018-04-06 13:33:52信息关闭钩子管理器:54-删除目录C:\Users\anant\AppData\Local\Temp\spark-6da93408-88cb-4fc7-a2de-18ed16c36
看起来像是带有参数默认值的bugspark.kubernetes.driver.container.image
,必须是spark.kubernetes.container.image
。因此请尝试直接指定驱动程序/执行器容器映像:
- spark.kubernetes.driver.container.image
- spark.kubernetes.executor.container.image
spark.kubernetes.container.image
spark.kubernetes.driver.container.image
spark.kubernetes.executor.container.image
我注意到,与2.2.0相比,Spark 2.3.0在k8s实现方面有了很大的变化。例如,与单独指定驱动程序和执行程序不同,官方入门指南是使用一个单独的映像提供给Spark.kubernetes.container.image
看看这是否有效:
spark-submit \
--master k8s://http://127.0.0.1:8001 \
--name cfe2 \
--deploy-mode cluster \
--class com.oracle.Test \
--conf spark.executor.instances=2 \
--conf spark.kubernetes.container.image=docker/anantpukale/spark_app:1.1 \
--conf spark.kubernetes.authenticate.submission.oauthToken=YOUR_TOKEN \
--conf spark.kubernetes.authenticate.submission.caCertFile=PATH_TO_YOUR_CERT \
local://spark-0.0.1-SNAPSHOT.jar
令牌和证书可在k8s仪表板上找到。请按照以下步骤制作与Spark 2.3.0兼容的docker映像。
Spark提交--master k8s://https://127.0.0.1:8001 --名称cfe2——部署模式集群——类cluster com.oracle.Test——conf spark.executor.instances 2——conf spark.kubernetes.driver.docker.image docker.io/anantpukale/spark_app:1.1--conf spark.kubernetes.executor.docker.image docker.io/anantpukale/spark_应用程序:1.1--conf spark.kubernetes.initcontainer.docker.image docker.io/anantpukale/spark_应用程序:1.1local://spark-0.0.1-SNAPSHOT.jar
也给出了相同的错误(相同的堆栈跟踪)如果您按照所编写的方式使用该命令,则中间有一个换行符。:稍微更改了上面的代码spark submit--master k8s://http://127.0.0.1:8001 --名称cfe2——部署模式集群——类com.oracle.Test——conf spark.executor.instances=2——conf spark.kubernetes.container.image=docker/anantpukale/spark_app:1.1——conf spark.kubernetes.driver.container.image=docker.io/kubespark/spark-driver:v2.2.0-kubernetes-0.5.0--conf spark.kubernetes.executor.container.image=docker.io/kubespark/spark-executor:v2.2.0-kubernetes-0.5.0local://spark-0.0.1-SNAPSHOT.jar
,输出:HTTP 502网关错误。以上设置位于公司防火墙后面。如何绕过?用户名:@wolich22,我试图通过创建kube pod来完成spark提交。结果是exitCode=127。在哪里检查应用程序日志???@AnantPukale如果键入kubectl cluster info
,您可以看到kube dashboard的托管位置,您可以从dashboard查看作业和检查日志。驱动程序pod在堆栈下失败++id-u+myuid=0++id-g+mygid=0++getent passwd 0+uidentry=root:x:0:0:root:/root:/bin/ash+'['-z root:x:0:0:root:/root:/bin/ash']+/sbin/tini-s--driver[FATAL tini(10)]exec驱动程序失败:没有使用这样的文件或目录
驱动程序映像是docker。io/kubespark/spark驱动程序:v2.2.0-kubernetes-0.5.0这是使用spark 2.2.0的docker映像时出现的错误。您需要使用2.3.0的docker-image-tool.sh生成新映像。