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

时间:2019-01-03 12:16:00

标签: amazon-web-services terraform airflow amazon-emr

如何在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建立了连接:-

enter image description here

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

A

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

2 个答案:

答案 0 :(得分:4)

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

  1. 使用Apache Livy

    • 此解决方案实际上独立于远程服务器,即EMR
    • Here's一个例子
    • 不利的一面是Livy处于早期阶段,它的API在我看来incomplete and wonky
  2. 使用EmrSteps API

    • 取决于远程系统:EMR
    • 健壮,但由于它本身是 async ,因此您还需要EmrStepSensor(与EmrAddStepsOperator并存)
    • 在单个EMR集群上,您不能同时运行多个步骤(尽管存在一些hacky workarounds
  3. 使用SSHHook / SSHOperator

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

EDIT-1

似乎还有另一种简单的方法

  1. 指定远程master-IP


有用的链接

答案 1 :(得分:0)

使用Terraform创建EMR后,您将获得主IP为aws_emr_cluster.my-emr.master_public_dns

希望这会有所帮助。