提问者:小点点

K8s上的火花-获取错误:库贝模式不支持在本地引用应用依赖


我正在尝试在k8s上设置一个火花集群。通过以下文章,我已经设法创建并设置了一个具有三个节点的集群:https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/

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

~/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 INFO ShutdownHookManager:54-删除目录 /private/var/folders/lz/0bb8xlyd247cwc3kvh6pmrz00000gn/T/spark-3967f4ae-e8b3-428d-ba22-580fc9c840cd

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


共2个答案

匿名用户

错误消息来自提交5d7c4ba4d73a72f26d591108db3c20b4a6c84f3f,并包含您提到的页面:“在库伯内特斯上运行火花”,并提及您指示:

// 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中进行了描述:

它不接受运行本地:jar文件,例如local://select/park/example/jars/spack-examples_2.11-2.2.0-k8s-0.5.0。jar,在我的火花码头工人映像上(允许MixedArgumentsisAppResourceReq booleans中SparkSubmitCommandBuilder.java挡道)。

这与Kubernetes问题34377有关

问题SPARK-22962"如果使用本地文件,库伯内特斯应用程序将失败"提到:

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

与此同时,该错误消息是在20320年PR引入的。

它包括评论:

我所做的手动测试实际上使用了位于gcs和超文本传输协议上的主端jar。
具体来说,我做了以下测试:

  • 使用gs://main应用程序jar和超文本传输协议://依赖jar。成功。
  • 使用https://main应用程序jar和超文本传输协议://依赖jar。成功。
  • 使用本地://main应用程序jar。成功。
  • 使用file://main应用程序jar。失败。
  • 使用file://依赖jar。失败。

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

我使用最新的spack-kubernetesjar来替换spack-2.3.0-bin-hadoop2.7包中的那个。异常消失了。

匿名用户

根据上述留档:

如果您的应用程序的依赖项都托管在远程位置,如HDFS或HTTP服务器,它们可能会被相应的远程URI引用。此外,应用程序依赖项可以预挂载到自定义构建的Docker映像中。通过使用local://URI引用这些依赖项和/或在Dockerfiles中设置SPARK_EXTRA_CLASSPATH环境变量,可以将这些依赖项添加到类路径中。当在spack-提交中引用自定义构建的Docker映像中的依赖项时,也需要local://方案。

请注意,目前尚不支持从提交客户端的本地文件系统中使用应用程序依赖项。