Spark上K8s - 收到错误:kube模式不支持在本地引用app依赖项

时间:2018-06-01 06:25:27

标签: apache-spark kubernetes

我正在尝试在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 INFO 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

3 个答案:

答案 0 :(得分:6)

错误消息来自commit 5d7c4ba4d73a72f26d591108db3c20b4a6c84f3f并包含您提及的页面:“Running Spark on Kubernetes”并提及您指出:

// 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

中对此进行了描述
  

它不接受运行local:jar文件,例如local:///opt/spark/examples/jars/spark-examples_2.11-2.2.0-k8s-0.5.0.jar,在我的火花泊坞窗图片上allowsMixedArguments中的isAppResourceReq booleansSparkSubmitCommandBuilder.java阻挡了我。

这与kubernetes issue 34377

相关联

issue SPARK-22962 "Kubernetes app fails 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确认in the comments

  

我使用最新的spark-kubernetes jar来替换spark-2.3.0-bin-hadoop2.7包中的那个。例外消失了。

答案 1 :(得分:2)

根据上面提到的documentation

  

依赖关系管理

     

如果您的应用程序的依赖项都是   托管在远程位置,如HDFS或HTTP服务器,它们可能是   由适当的远程URI引用。 另外,申请   依赖项可以预先安装到自定义构建的Docker镜像中。那些   可以通过引用它们将依赖项添加到类路径中   local:// URIs和/或设置SPARK_EXTRA_CLASSPATH环境   Dockerfiles中的变量。 还需要local://方案   在引用定制的Docker镜像中的依赖关系时   火花提交即可。

     

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

答案 2 :(得分:0)

我有同样的情况。

我不知道该怎么办?怎么修? Spark版本2.3.0。

已复制并重命名了spark-kubernetes_2.11-2.3.1.jar-> spark-kubernetes_2.11-2.3.0.jar。

Spark找不到相应的kubernetes文件。

bin/spark-submit \
--master k8s://https://lubernetes:6443 \
--deploy-mode cluster \
--name spark-pi \
--class org.apache.spark.examples.SparkPi \
--conf spark.kubernetes.namespace=spark \
--conf spark.executor.instances=5 \
--conf spark.kubernetes.container.image=gcr.io/cloud-solutions-images/spark:v2.3.0-gcs \
--conf spark.kubernetes.authenticate.submission.caCertFile=/var/run/secrets/kubernetes.io/serviceaccount/k8.crt \
--conf spark.kubernetes.authenticate.driver.serviceAccountName=spark \ 
local:///usr/spark-2.3.0/examples/jars/spark-examples_2.11-2.3.0.jar

感谢您的帮助!