docker - 从 Airflow 向外部火花容器提交火花作业
问题描述
我有一个使用 docker swarm 构建的火花和气流集群。气流容器不能像我预期的那样包含 spark-submit。
我正在使用 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)
我还在网站中按如下方式配置连接:
Master是 spark master 容器的主机名。
但它没有找到火花提交,它会产生以下错误:
[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 slim image ( https://hub.docker.com/_/python/ )。此映像不包含常用包,仅包含运行 python 所需的最小包。因此,您将需要扩展映像并安装spark-submit
在您的容器上。
编辑: Airflow 确实需要容器中的 spark 二进制文件才能SparkSubmitOperator
按照此处记录的方式运行。
您可以使用的另一种方法是通过 SSH 连接到远程计算机来在外部 VM 上SSHOperator
运行命令。spark-submit
但是这里也应该可以使用 Puckel Airflow 中不可用的 SSH。
推荐阅读
- rest - 用于获取嵌套对象字段的 Rest api 设计
- html - 我有一些代码可以列出单选按钮列表中的选项,但我只能获得单选按钮,但无法获得价值
- reactjs - 如何修复“开发服务器返回响应错误代码:500”这个错误反应原生
- python-3.x - 除以 10 时输出错误
- tensorflow - 无法找到软件包 libtensorflow-dev
- python - Python selenium webscraping返回找不到元素
- javascript - 循环访问数据库子项并显示每个子项
- php - 系统找不到指定的路径1
- video - 如何根据给定的色度信息计算视频的大小?
- rust - 使用每晚版本的箱子?