我怎样才能建立EMR主群集(由Terraform创建)和气流之间的连接。 我有根据与同一SG,VPC和子网AWS EC2服务器气流设置。
我需要的解决方案,使气流可以跟EMR和执行星火提交。
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’])
我的问题是 - 如何更新我上面的代码可以做火花提交行动
虽然它可能不会直接解决您的特定查询,广义地说,这里有一些方法可以引发spark-submit
上( 远程 ) EMR
通过Airflow
使用Apache Livy
- 这种解决方案实际上是独立的远程服务器,即,
EMR
- 下面是一个例子
- 缺点是,
Livy
是在早期阶段,它的API
似乎不完整的 , 靠不住的我
使用EmrSteps
API
- 依赖远程系统上:
EMR
- 坚固耐用,但因为它本质上是异步 ,你还需要一个
EmrStepSensor
(旁边EmrAddStepsOperator
) - 在单
EMR
集群,你不能同时运行一个以上的步骤(虽然有些哈克解决方法存在)
使用SSHHook
/ SSHOperator
- 再次独立远程系统的
- 比较容易上手
- 如果你的
spark-submit
命令涉及到很多参数,构建命令(在程序上)可能变得非常麻烦
编辑-1
似乎有另一种简单的方法
指定远程master
-IP
- 独立的远程系统
- 需要修改全局配置/环境变量
- 见@ cricket_007的答案的详细信息
相关链接
- 这是一个从@Kaxil奈克自己: 有没有一种方法来在不同的服务器上运行的主提交火花工作
- 利用气流通过李维提交一批POST方法和跟踪工作星火作业提交
- 远程火花提交纱线行走在EMR
正如你所使用Terraform创建EMR,那么你得到的主IP作为aws_emr_cluster.my-emr.master_public_dns
希望这可以帮助。