docker - 将来自Airflow的 Spark 作业提交到外部 Spark 容器

标签 docker apache-spark airflow

我有一个用docker swarm构建的 Spark 和气流集群。气流容器不能包含预期的 Spark 。

我正在使用以下存在于github中的图像

Spark:大数据欧洲/ 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 提交,它会产生以下错误:
[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'

最佳答案

据我所知puckel/docker-airflow使用的是 Python超薄图像(https://hub.docker.com/_/python/)。该镜像不包含通用软件包,仅包含运行python所需的最少软件包。因此,您将需要扩展镜像并在容器上安装spark-submit

编辑:气流确实需要容器中的 Spark 二进制文件,以便按照here的说明运行SparkSubmitOperator

您可以使用的另一种方法是通过SSH进入远程计算机,使用SSHOperator在外部VM上运行spark-submit命令。但是在这里,SSH也应该可用,而Puckel Airflow中没有。

关于docker - 将来自Airflow的 Spark 作业提交到外部 Spark 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52475861/

相关文章:

python-3.x - 更改 AirFlow 中的 Lambda 调用的 "readtimeout"

logging - Airflow KubernetesPodOperator 1.10.12 - 记录了任务启动信息,但没有来自容器的标准输出

bash - 使用docker exec将带有转义字符的参数传递给脚本

docker - 我可以在 IBM Power 系统上运行 docker 容器进行 x86 构建吗?

docker - undefined reference - 使用 Docker 构建 Golang CGO 失败,但在主机上失败

scala - 如何比较两个共享相同内容的 StructType?

image - 构建时可以是 docker 层 "bypassed"吗?

apache-spark - spark 读取非 UTF-8 编码的 wholeTextFiles

python - 使用 Spark scala 中的 python scipy

Airflow 2.0 对 Contrib Operator 的支持