Отправить искровое задание из Airflow во внешний искровой контейнер - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть кластер искр и воздушных потоков, который построен с помощью док-роя.Контейнер воздушного потока не может содержать spark-submit, как я ожидаю.

Я использую следующие изображения, которые существуют в github

Spark: big-data-europe / docker-hadoop-spark-workbench

Воздушный поток: puckel / docker-airflow (CeleryExecutor)

Я подготовил файл .py и добавил его в папку dags.

from airflow import DAG

from airflow.contrib.operators.spark_submit_operator import SparkSubmitOperator
from datetime import datetime, timedelta


args = {'owner': 'airflow', 'start_date': datetime(2018, 9, 24) }

dag = DAG('spark_example_new', default_args=args, schedule_interval="@once")

operator = SparkSubmitOperator(task_id='spark_submit_job', conn_id='spark_default', java_class='Main', application='/SimpleSpark.jar', name='airflow-spark-example',conf={'master':'spark://master:7077'},
        dag=dag)

Я также настраиваю соединение следующим образом на веб-сайте:

enter image description here

Master являетсяимя хоста основного контейнера spark.

Но он не находит spark-submit, выдает следующую ошибку:

[2018-09-24 08:48:14,063] {{logging_mixin.py:95}} INFO - [2018-09-24 08:48:14,062] {{spark_submit_hook.py:283}} INFO - Spark-Submit cmd: ['spark-submit', '--master', 'spark://master:7077', '--conf', 'master=spark://master:7077', '--name', 'airflow-spark-example', '--class', 'Main', '--queue', 'root.default', '/SimpleSpark.jar']

[2018-09-24 08:48:14,067] {{models.py:1736}} ERROR - [Errno 2] No such file or directory: 'spark-submit': 'spark-submit'
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/airflow/models.py", line 1633, in _run_raw_task
    result = task_copy.execute(context=context)
  File "/usr/local/lib/python3.6/site-packages/airflow/contrib/operators/spark_submit_operator.py", line 168, in execute
    self._hook.submit(self._application)
  File "/usr/local/lib/python3.6/site-packages/airflow/contrib/hooks/spark_submit_hook.py", line 330, in submit
    **kwargs)
  File "/usr/local/lib/python3.6/subprocess.py", line 709, in __init__
    restore_signals, start_new_session)
  File "/usr/local/lib/python3.6/subprocess.py", line 1344, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'spark-submit': 'spark-submit'

1 Ответ

0 голосов
/ 25 сентября 2018

Насколько я знаю, puckel/docker-airflow использует Python slim image (https://hub.docker.com/_/python/).) Это изображение не содержит общих пакетов и содержит только минимальные пакеты, необходимые для запуска python. Следовательно, выпотребуется расширить образ и установить spark-submit в вашем контейнере.

Редактировать : для воздушного потока нужны искровые двоичные файлы в контейнере для запуска SparkSubmitOperator, как описано здесь .

Другой подход, который вы можете использовать, - использовать SSHOperator для запуска команды spark-submit на внешней виртуальной машине посредством SSHing на удаленной машине. Но и здесь также должен быть доступен SSH, который недоступенв воздушном потоке Puckel.

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