Где разместить приложение Spark при отправке его в Kubernetes?

У меня такой же случай как в этой теме. Spark на K8s - получение ошибки: режим kube не поддерживает ссылки на зависимости приложения в локальном

Я запускаю Spark из контейнера. https://github.com/gettyimages/docker-spark/blob/master/Dockerfile

bin/spark-submit \
--master k8s://https://kubernetes: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

Ошибка:

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-07-07 05:56:27 INFO  ShutdownHookManager:54 - Shutdown hook called
2018-07-07 05:56:27 INFO  ShutdownHookManager:54 - Deleting directory /tmp/spark-67367f1a-4ea8-43d6-98e4-23bd6015c6a6

Возможное решение там не полностью продемонстрировано.

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

Я попытался загрузить новую версию jar-файла spark-kubernetes в spark/jars.

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

После этого исправления Spark не находит соответствующие файлы kubernetes.


person JDev    schedule 07.07.2018    source источник
comment
Что не так с копированием jar на hdfs, s3 или http-сервер, пока это поведение не изменится?   -  person mdaniel    schedule 08.07.2018
comment
Я вас немного не понял. Что ты имеешь в виду?   -  person JDev    schedule 08.07.2018
comment
Мой опыт работы со Spark находится внутри кластера Hadoop, где нужно было скопировать jar-файл в HDFS или S3, а затем отправить задание, которое запускало доступное по сети местоположение jar-файла. Ошибка (?), которую вы связали с упомянутыми URL-адресами http, также будет работать, если использование HDFS или S3 будет слишком неудобным. В основном замените local://opt/ на s3://some-bucket и используйте это вместо того, чтобы ждать следующего выпуска.   -  person mdaniel    schedule 08.07.2018
comment
@MatthewLDaniel, спасибо за ответ. Я скопировал искру в hdfs, но получаю ту же ошибку. root@ca-spark-deployment-64bbfb4cfb-lnsdh:/usr/spark-2.3.1# hadoop fs -put /usr/spark-2.3.1/examples/jars/spark-examples_2.11-2.3.1.jar / tmp/spark-examples_2.11-2.3.1.jar   -  person JDev    schedule 10.07.2018
comment
такая же ошибка, что, поскольку я не ожидал ошибки локальной файловой системы при указании пути jar HDFS?   -  person mdaniel    schedule 11.07.2018
comment
Я думаю, что я делаю что-то не так или не понимаю, что такое hdfs. Я использую этот контейнер: hub.docker.com/r/gettyimages/spark/ ~/докерфайл . и когда я просматриваю например hdfs dfs -ls / - то он показывает мне только корневые папки системы. А если я скопирую файл в /tmp, то tmp у меня в реальной системе. Поэтому возникает та же ошибка.   -  person JDev    schedule 11.07.2018
comment
Затем, возможно, пометьте этот вопрос hadoop или hdfs или откройте новый вопрос, потому что эта проблема не имеет ничего общего с kubernetes (или искрой, если на то пошло).   -  person mdaniel    schedule 11.07.2018
comment
В порядке. Спасибо за помощь.   -  person JDev    schedule 11.07.2018


Ответы (1)


это команда, которая работала для меня:

/opt/spark/bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master k8s://https://$KUBERNETES_SERVICE_HOST:$KUBERNETES_SERVICE_PORT \
--conf spark.kubernetes.namespace=myproject \
--deploy-mode cluster \
--conf spark.app.name=my-spark-app \
--conf spark.kubernetes.container.image=jkremser/openshift-spark:2.3-latest \
--conf spark.kubernetes.submission.waitAppCompletion=false \
--conf spark.kubernetes.driver.label.radanalytics.io/app=my-spark-app \
--conf spark.driver.cores=0.100000 \
--conf spark.kubernetes.driver.limit.cores=200m \
--conf spark.driver.memory=512m \
--conf spark.kubernetes.authenticate.driver.serviceAccountName=spark-operator \
--conf spark.kubernetes.driver.label.version=2.3.0 \
--conf spark.kubernetes.executor.label.sparkoperator.k8s.io/app-name=my-spark-app \
--conf spark.executor.instances=1 \
--conf spark.executor.cores=1 \
--conf spark.executor.memory=512m \
--conf spark.kubernetes.executor.label.version=2.3.0 \
--conf spark.jars.ivy=/tmp/.ivy2 \
local:///opt/spark/examples/jars/spark-examples_2.11-2.3.0.jar

Убедитесь, что файл /usr/spark-2.3.0/examples/jars/spark-examples_2.11-2.3.0.jar присутствует в образе контейнера (в вашем случае gcr.io/cloud-solutions-images/spark:v2.3.0-gcs), потому что он должен указывать не на локальный файл, а на файл в контейнере.

Вы можете сделать это примерно так:

docker run --rm -ti gcr.io/cloud-solutions-images/spark:v2.3.0-gcs sh

и осмотрите что там (где баночка с примерами).

Удачи.

person Jiri Kremser    schedule 30.07.2018