Поддерживает ли Spark Kubernetes аргумент --py-files? - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь запустить работу PySpark с использованием Kubernetes. Основной скрипт и py-файлы размещаются в облачном хранилище Google. Если я запускаю задание с помощью автономного менеджера ресурсов:

spark-submit \
--master local \
--deploy-mode client \
--repositories "http://central.maven.org/maven2/" \
--packages "org.postgresql:postgresql:42.2.2" \
--py-files https://storage.googleapis.com/foo/some_dependencies.zip \
https://storage.googleapis.com/foo/script.py some args

Работает нормально. Но если я попробую то же самое, используя Kubernetes:

spark-submit \
--master k8s://https://xx.xx.xx.xx  \
--deploy-mode cluster \
--conf spark.kubernetes.container.image=gcr.io/my-spark-image \
--repositories "http://central.maven.org/maven2/" \
--packages "org.postgresql:postgresql:42.2.2" \
--py-files https://storage.googleapis.com/foo/some_dependencies.zip \
https://storage.googleapis.com/foo/script.py  some args

Затем запускается основной скрипт, но он не может найти модули в файлах зависимостей. Я знаю, что могу скопировать все файлы внутри образа Docker, но я бы предпочел сделать это таким образом.

Возможно ли это? Я что-то упустил?

Спасибо

Ответы [ 2 ]

0 голосов
/ 08 июля 2019

ENV: spark 2.4.3

ОБНОВЛЕННЫЙ ответ:

В https://spark.apache.org/docs/latest/running-on-kubernetes.html#dependency-management, документы говорит:

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

СТАРЫЙ ответ:

Я столкнулся с той же проблемой.Я не думаю, что файлы в --py-файлах будут разосланы водителю и исполнителям.Я отправляю файл Python в кластер K8s с помощью следующей команды:

bin/spark-submit \
--master k8s://https://1.1.1.1:6443 \
--deploy-mode cluster \
--name spark-test \
--conf xxx.com/spark-py:v2.4.3 \
--py-files /xxx/spark-2.4.3-bin-hadoop2.7/spark_test1.py \
http://example.com/spark/__main__.py

Я получил журналы в модуле драйвера:

+ PYTHONPATH='/opt/spark/python/lib/pyspark.zip:/opt/spark/python/lib/py4j-*.zip:file:///xxx/spark-2.4.3-bin-hadoop2.7/spark_test1.py'

Я получил ошибки, подобные следующим:

Traceback (most recent call last):
  File "/tmp/spark-5e76171d-c5a7-49c6-acd2-f48fdaeeb62a/__main__.py", line 1, in <module>
    from spark_test1 import main
ImportError: No module named spark_test1

Из-за ошибок основной файл python загружается и распространяется на драйвер.Для --py-files PYTHONPATH содержит точно такой же путь в моем cmd, что я не думаю, что эти файлы загружаются по этому пути в модуле драйвера и модуле исполнителя.

Я пытался заменить spark_test1.pyот локального пути к URL-адресу HTTP.PYTHONPATH изменился неприлично, но ошибка та же.

0 голосов
/ 11 апреля 2019

На самом деле --py-files может использоваться для распространения зависимостей между исполнителями.Можете ли вы отобразить ошибки, которые вы получаете?Вы импортируете свои почтовые индексы (SparkContext.addPyFile) в основной файл .py?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...