将 Spark 作业从 Airflow 提交到外部 Spark 容器

2024-01-22

我有一个用 docker swarm 构建的 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)

我还在网站中配置连接如下:

Master是 Spark Master 容器的主机名。

但它没有找到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'

据我所知puckel/docker-airflow uses 蟒蛇苗条 image(https://hub.docker.com/_/python/ https://hub.docker.com/_/python/)。该镜像不包含公共包,仅包含运行 python 所需的最小包。因此,您需要扩展映像并安装spark-submit在你的容器上。

Edit:Airflow 确实需要容器中的 Spark 二进制文件才能运行SparkSubmitOperator据记录here https://airflow.apache.org/code.html?highlight=sparksubmitoperator#airflow.contrib.operators.spark_jdbc_operator.SparkJDBCOperator.

您可以使用的另一种方法是使用SSHOperator to run spark-submit通过 SSH 连接到远程计算机来在外部 VM 上执行命令。但这里 SSH 也应该可用,而 Puckel Airflow 中不可用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Spark 作业从 Airflow 提交到外部 Spark 容器 的相关文章

随机推荐

  • Python:获取可调用函数参数的名称

    如何获取作为参数传递给另一个函数的可调用函数的字符串表示形式 def foo print This is my callback function def bar callback None print something bar foo
  • C++ 中位字段的特征

    Reading https en cppreference com w cpp language bit field https en cppreference com w cpp language bit field 下列结论正确吗 相邻
  • 使 git pull (rebase) 默认仅从当前下游分支拉取

    我正在使用我发现的方法默认情况下拉 rebase http d strelau net post 47338904 git pull rebase by default进行 git pull 时 现在我想让 git pull 默认情况下仅拉
  • 获取房产指南

    这是上下文 我正在尝试为 经过身份验证的用户 组设置一堆属性 为此 我编写了以下脚本 GETTING AUTHENTICATED USERS SID sid1 S 1 5 11 objSID1 New Object System Secur
  • @ImportAutoConfiguration 和 @Import 有什么区别

    是不是真的org springframework boot autoconfigure ImportAutoConfiguration是改进的替代品org springframework context annotation Import因
  • 中央流光按钮

    如何使用 Streamlit 将按钮居中以使该按钮仍然可单击 这是返回随机数的按钮的一个小示例 import streamlit as st import numpy as np if st button Click rand np ran
  • 运行简单后台任务的最简洁方法?

    我已经看到至少五种模式 通过它们您可以在工作线程中运行一些代码 最简单 new Thread new Runnable public void run start 我们可以延长AsyncTask 我们有AsyncTaskLoader和别的L
  • 通过 COM 从 Ruby 调用 C# .dll

    我正在尝试在 Ruby 代码中调用 C 中的一些方法 首先 我在 Visual Studio 2008 中创建一个 dll 我在构建时注册 COM 互操作 为了测试这个新过程 我用 C 创建了一个简单的 DivideTwo 小方法 publ
  • SVG 的 PHP CSS 控制

    我正在尝试使用 CSS 来控制 svg 文件的颜色 我使用 html 来调用 svg 我页面上的颜色由 php 控制 其他所有内容都在 php 中 我确信我一定错过了一个步骤 因为我无法获取颜色 php 页面来控制 svg div clas
  • 如何从 Golang 的 Slice 中删除元素

    fmt Println Enter position to delete fmt Scanln pos new arr make int len arr 1 k 0 for i 0 i lt len arr 1 if i pos new a
  • 如何获取DNS中的TTL(Time To Live)?

    我想监控 DNS 地址 我需要得到TTL 生存时间 告诉我 DNS 记录何时到期 C 中如何获取TTL Net 示例代码位于C NET DNS 查询组件 http www codeproject com Articles 12072 C N
  • 在 Unix 中删除 ANSI 颜色转义的最佳方法

    我有一个 perl 程序 它用颜色打印输出 如果我重定向文件中的输出并在 vi 中打开它 我会看到颜色特殊字符 像这样的东西 31 43mAnd this is red on yellow too 0m 从输出文件中删除此颜色字符的最佳方法
  • Controller类中session和params的区别

    我正在查看购物车的 Rails 示例 在 ApplicationController 类中我看到如下代码 class ApplicationController lt ActionController Base protect from f
  • 如何对整列使用indexOf?

    我正在创建一个带有下拉列表的列 A 列 该列表取决于同一行 G 列中的相邻值 下拉列表的内容位于另一个工作表 OE 名称 中 在其中对它们进行索引以选择值的正确列表 仅包含相关脚本和列的工作表示例如下 https docs google c
  • 字符串中的零填充数字

    我需要将单个数字 1 到 9 转换为 01 到 09 我可以想到一个办法 但它又大又丑又麻烦 我确信一定有一些简洁的方法 有什么建议 首先 你的描述有误导性 Double是浮点数据类型 您可能想在字符串中用前导零填充数字 以下代码执行此操作
  • HTTP 在 Android 模拟器中不起作用

    我尝试了多个 HTTP 类 HttpURLConnection HTTPClient和其他 但它们在模拟器中不起作用 然后我决定在我的手机上测试一下 效果很好 那么我该如何解决 Android 模拟器 HTTP 类不起作用 而浏览器可以工作
  • 为什么来自 POSTMAN 的 POST 请求返回空?

    我在邮递员中的标题如下 我的身体是这样的 在 Laravel Lumen 路线中 我像这样检查 router gt group middleware gt auth function router router gt post sales
  • 无效的设备符号 cudaMemcpyFromSymbol CUDA

    我想计算 CUDA 中数组所有元素的总和 我想出了这段代码 它编译没有任何错误 但结果始终为零 我收到了无效的设备符号cudaMemcpyFromSymbol 我无法使用 Thrust 或 Cublas 等任何库 define TRIALS
  • 在 Swing 中使用 sleep()

    public class TestFrame extends JFrame public TestFrame setBounds 10 10 500 500 setLocationRelativeTo null setDefaultClos
  • 将 Spark 作业从 Airflow 提交到外部 Spark 容器

    我有一个用 docker swarm 构建的 Spark 和气流集群 正如我所期望的 气流容器不能包含火花提交 我正在使用 github 中存在的以下图像 Spark 大数据欧洲 docker hadoop spark workbench