Spark on K8s - получение ошибки: режим kube не поддерживает ссылки на приложения depenpendcies в локальном

Я пытаюсь настроить искровой кластер на 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

Примечание. Я следовал этой статье для установки искры на k8. https://spark.apache.org/docs/latest/running-on-kubernetes.html

Ответ 1

Сообщение об ошибке приходит от commit 5d7c4ba4d73a72f26d591108db3c20b4a6c84f3f и включает указанную вами страницу: " Запуск 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:

он не согласился бы запустить локальный файл jar, например local:///opt/spark/examples/jars/spark-examples_2.11-2.2.0-k8s-0.5.0.jar, на изображении моей докеры (например, allowsMixedArguments и isAppResourceReq booleans в SparkSubmitCommandBuilder.java мешают).

И это связано с проблемой кубернетов 34377

Проблема SPARK-22962 "Приложение Kubernetes не работает, если используются локальные файлы":

Это прецедентный сценарий сервера ресурсов. Мы будем развивать это в 2.4.0.

Тем временем это сообщение об ошибке было введено в PR 20320.

Он включает комментарий:

В ручных тестах я действительно использовал основную панель приложений, расположенную на gcs и http.
Чтобы быть конкретным и для записи, я сделал следующие тесты:

  • Использование gs://главного приложения jar и javascript http://. Преемник.
  • Использование https://главного приложения jar и javascript зависимости http://. Преемник.
  • Использование локального://главного приложения jar. Преемник.
  • Использование файла://main application jar. Не удалось.
  • Использование файла://байт зависимости. Не удалось.

Эта проблема должна быть исправлена к настоящему времени, и OP garfiny подтверждает в комментариях:

Я использовал самую новую spark-kubernetes jar чтобы заменить ее в пакете spark-2.3.0-bin-hadoop2.7. Исключено.

Ответ 2

Согласно указанной документации:

Управление зависимостями

Если ваши зависимости приложений все размещены в удаленных местах, таких как HDFS или HTTP-серверы, на них могут ссылаться соответствующие удаленные URI. Кроме того, зависимости приложений могут быть предварительно установлены в пользовательские изображения Docker. Эти зависимости могут быть добавлены в путь к классам путем ссылки на них с локальными //URI и/или установкой переменной среды SPARK_EXTRA_CLASSPATH в ваших файлах Docker. Локальная://схема также требуется при обращении к зависимостям в пользовательских изображениях Docker в spark-submit.

Обратите внимание, что использование зависимостей приложений от локальной файловой системы клиентов отправки пока не поддерживается.

Ответ 3

У меня такой же случай.

Я не знаю, что делать? Как исправить? Искры версии 2.3.0.

Скопировано и переименовано spark-kubernetes_2.11-2.3.1.jar → spark-kubernetes_2.11-2.3.0.jar.

Spark не находит соответствующие файлы кубернетов.

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

Спасибо за помощь!