首页 > 解决方案 > K8s 上的 Spark - 出现错误:kube 模式不支持在本地引用应用程序依赖项

问题描述

我正在尝试在 k8s 上设置火花集群。按照这篇文章,我已经成功地创建和设置了一个包含三个节点的集群: https ://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/

之后,当我尝试在集群上部署 spark 时,在 spark 提交设置时失败。我使用了这个命令:

~/opt/spark/spark-2.3.0-bin-hadoop2.7/bin/spark-submit \
--master k8s://https://206.189.126.172:6443 \
--deploy-mode cluster \
--name word-count \
--class org.apache.spark.examples.SparkPi \
--conf spark.executor.instances=5 \
--conf spark.kubernetes.container.image=docker.io/garfiny/spark:v2.3.0 \
—-conf spark.kubernetes.driver.pod.name=word-count \
local:///opt/spark/examples/jars/spark-examples_2.11-2.3.0.jar

它给了我这个错误:

Exception in thread "main" org.apache.spark.SparkException: The Kubernetes mode does not yet support referencing application dependencies in the local file system.
    at org.apache.spark.deploy.k8s.submit.DriverConfigOrchestrator.getAllConfigurationSteps(DriverConfigOrchestrator.scala:122)
    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-06-04 10:58:24 INFO ShutdownHookManager:54 - 称为 2018-06-04 10:58:24 的关闭挂钩信息 ShutdownHookManager:54 - 删除目录 /private/var/folders/lz/0bb8xlyd247cwc3kvh6pmrz00000gn/T/spark- 3967f4ae-e8b3-428d-ba22-580fc9c840cd

注意:我按照这篇文章在 k8s 上安装 spark。 https://spark.apache.org/docs/latest/running-on-kubernetes.html

标签: apache-sparkkubernetes

解决方案


错误消息来自提交 5d7c4ba4d73a72f26d591108db3c20b4a6c84f3f并包括您提到的页面:“在 Kubernetes 上运行 Spark ”,并提到您指出:

// TODO(SPARK-23153): remove once submission client local dependencies are supported.
if (existSubmissionLocalFiles(sparkJars) || existSubmissionLocalFiles(sparkFiles)) {
  throw new SparkException("The Kubernetes mode does not yet support referencing application " +
    "dependencies in the local file system.")
}

这在SPARK-18278中有描述:

它不接受在我的 spark docker 映像上运行 local: jar 文件,例如(local:///opt/spark/examples/jars/spark-examples_2.11-2.2.0-k8s-0.5.0.jar并且allowsMixedArguments妨碍)。isAppResourceReq booleansSparkSubmitCommandBuilder.java

这与kubernetes 问题 34377 有关

问题 SPARK-22962 “ Kubernetes app failed if local files are used”提到:

这是资源登台服务器用例。我们将在 2.4.0 时间范围内进行上游处理。

同时,PR 20320中引入了该错误消息。

它包括评论:

我所做的手动测试实际上使用了位于 gcs 和 http 上的主应用程序 jar。
为了具体和记录,我做了以下测试:

  • 使用 gs:// 主应用程序 jar 和 http:// 依赖项 jar。成功了。
  • 使用 https:// 主应用程序 jar 和 http:// 依赖项 jar。成功了。
  • 使用 local:// 主应用程序 jar。成功了。
  • 使用 file:// 主应用程序 jar。失败的。
  • 使用 file:// 依赖 jar。失败的。

这个问题现在应该已经解决了,OP garfiny在评论中确认:

我用最新spark-kubernetes jar的替换了spark-2.3.0-bin-hadoop2.7包装中的那个。异常消失了。


推荐阅读