如何通过Airflow将Spark作业提交给EMR集群?

Kal*_*lly 4 amazon-web-services amazon-emr terraform airflow

如何在EMR主群集(由Terraform创建)和Airflow之间建立连接。我在具有相同SG,VPC和子网的AWS EC2服务器下设置了Airflow。

我需要解决方案,以便Airflow可以与EMR对话并执行Spark提交。

https://aws.amazon.com/blogs/big-data/build-a-concurrent-data-orchestration-pipeline-using-amazon-emr-and-apache-livy/

这些博客对建立连接后的执行情况有一定的了解。

在气流中,我已经使用用于AWS和EMR的UI建立了连接:

在此处输入图片说明

下面的代码将列出处于活动状态和已终止的EMR群集,我也可以进行微调以获得活动群集:-

from airflow.contrib.hooks.aws_hook import AwsHook
import boto3
hook = AwsHook(aws_conn_id=‘aws_default’)
    client = hook.get_client_type(‘emr’, ‘eu-central-1’)
    for x in a:
        print(x[‘Status’][‘State’],x[‘Name’])
Run Code Online (Sandbox Code Playgroud)

我的问题是-如何更新我的上述代码可以执行Spark提交操作

y2k*_*ham 8

虽然它可能无法直接解决您的特定查询,但从广义上讲,这是您可以通过以下方式spark-submit在(远程EMR上触发的一些方法Airflow

  1. 使用 Apache Livy

    • 该解决方案实际上独立于远程服务器,即 EMR
    • 这是一个例子
    • 不利的一面是,它还Livy处于早期阶段,对我来说API似乎并不完整,而且很古怪
  2. 使用 EmrSteps API

    • 取决于远程系统: EMR
    • 健壮,但由于它本质上是异步的,因此您还需要一个EmrStepSensor(旁边EmrAddStepsOperator
    • 在单个EMR群集上,您不能同时运行多个步骤(尽管存在一些棘手的解决方法
  3. 使用SSHHook/SSHOperator

    • 再次独立于远程系统
    • 相对较容易上手
    • 如果您的spark-submit命令涉及很多参数,那么(以编程方式)构建该命令可能会变得很麻烦

编辑1

似乎还有另一种直接的方法

  1. 指定远程master-IP


有用的链接