【问题标题】:Exception in thread "main" org.apache.spark.SparkException: Must specify the driver container image线程“主”org.apache.spark.SparkException 中的异常:必须指定驱动程序容器映像
【发布时间】:2018-09-16 06:37:08
【问题描述】:

我正在尝试使用命令从本地计算机 CLI 在 minikube(Kubernetes) 上执行 spark-submit

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

我有一个基于 2.3.0 版构建的简单 Spark 作业 jar。我还在 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

【问题讨论】:

  • 如果你使用你写的命令,你有一个换行符。

标签: apache-spark docker kubernetes kubectl minikube


【解决方案1】:

看起来像参数spark.kubernetes.driver.container.image的默认值的错误,它必须是spark.kubernetes.container.image。所以尝试直接指定驱动程序/执行程序容器镜像:

  • spark.kubernetes.driver.container.image
  • spark.kubernetes.executor.container.image

【讨论】:

  • spark-submit --master k8s://https://127.0.0.1:8001 --name cfe2 --deploy-mode cluster --class 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_app:1.1 --conf spark.kubernetes.initcontainer.docker.image docker.io/anantpukale/spark_app:1.1 local://spark-0.0.1-SNAPSHOT.jar 也给出了相同的错误(相同的堆栈跟踪)
【解决方案2】:

source code,唯一可用的配置选项是:

spark.kubernetes.container.image
spark.kubernetes.driver.container.image
spark.kubernetes.executor.container.image

我注意到 Spark 2.3.0 与 2.2.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 仪表板上找到。关注instructions 制作兼容 Spark 2.3.0 的 docker 镜像。

【讨论】:

  • :稍微更改了上面的代码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.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.0 local://spark-0.0.1-SNAPSHOT.jar,输出:HTTP 502 网关错误。以上设置在公司防火墙后面。如何绕过?
  • 用户名:@wolich22,我尝试通过创建 kube pod 来进行 spark 提交。这以 exitCode=127 结束。在哪里查看应用程序日志??
  • @AnantPukale 如果您输入 kubectl cluster-info,您可以看到 Kube 仪表板的托管位置,您可以查看您的作业并从仪表板查看日志。
  • 驱动程序 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 driver failed: No such file or directory 使用的驱动程序映像是 docker.io/kubespark/spark-driver:v2.2.0-kubernetes-0.5.0
  • 这是您在使用 Spark 2.2.0 的 docker 镜像时遇到的错误。您需要使用 2.3.0 的 docker-image-tool.sh 在Spark 2.3.0's tutorial 之后构建新映像。
猜你喜欢
  • 2022-06-29
  • 1970-01-01
  • 2016-12-02
  • 1970-01-01
  • 2015-10-25
  • 2021-11-29
  • 2021-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多