1. 准备工作

1.1. 安装并初始化airflow,参考以下文档:

https://www.cnblogs.com/zackstang/p/11082322.html

其中还要额外安装的是:

sudo pip-3.6 install -i https://pypi.tuna.tsinghua.edu.cn/simple 'apache-airflow[celery]'

sudo pip-3.6 install -i https://pypi.tuna.tsinghua.edu.cn/simple boto3

1.2. 配置好本地AWS Credentials,此credential需有启动EMR 的权限。

1.3. 置数据库为外部数据库:

编辑 airflow.cfg 文件,修改数据库连接配置(需提前在数据库中创建好airflowdb 的数据库):

sql_alchemy_conn = mysql://user:password@database_location/airflowdb

使用下面的命令检查并初始化:

airflow initdb

1.4. 配置executor 为 CeleryExecutor

编辑airflow.cfg 文件,修改executor配置:

executor = CeleryExecutor

修改后可以保证相互无依赖的任务可以并行执行。默认为SequentialExecutor,也就是按顺序执行。

1.5 配置broker_url 与 result_backend

airflow.cfg 文件中修改以下两个条目:

broker_url = sqla+mysql:// user:password@database_location:3306/airflowdb

result_backend = db+mysql:// user:password@database_location:3306/airflowdb

配置完后启动airflow 的web ui,worker,flower以及scheduler:

airflow webserver -p 8080 &

airflow worker &

airflow flower &

airflow scheduler &

2. 定义工作流

创建dag_trasform.py 文件,在文件中定义工作流

from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from datetime import datetime, timedelta
from airflow.sensors.external_task_sensor import ExternalTaskSensor default_args = {
'owner': 'Airflow',
'depends_on_past': False,
'start_date': datetime.now().replace(microsecond=0),
'email': [‘xxxxxx@qq.com'],
'email_on_failure': False,
'email_on_retry': False,
'retries': 0,
'retry_delay': timedelta(minutes=5),
# 'queue': 'bash_queue',
# 'pool': 'backfill',
# 'priority_weight': 10,
# 'end_date': datetime(2016, 1, 1),
} dag = DAG('dag_transform', default_args=default_args,
schedule_interval=timedelta(days=1)) # create emr cluster
t0 = BashOperator(
task_id='create_emr_cluster',
bash_command='python3 /home/hadoop/scripts/launch_emr.py',
dag=dag) # do wordcount
t1 = BashOperator(
task_id='spark_job',
bash_command='python3 /home/hadoop/scripts/submit_spark_job.py',
dag=dag) # check result in s3
t2 = BashOperator(
task_id='check_s3',
bash_command='python3 /home/hadoop/scripts/check_s3_result.py',
dag=dag) # hive query
t3 = BashOperator(
task_id='query',
bash_command='python3 /home/hadoop/scripts/query_result.py',
dag=dag) # terminate cluster
t4 = BashOperator(
task_id='terminate_cluster',
bash_command='python3 /home/hadoop/scripts/terminate_cluster.py',
dag=dag) # define airflow DAG
t0 >> t1
t1 >> t2
t2 >> t3
t3 >> t4

其中各个BashOperator中的脚本需自行实现,根据需求实现即可。

3. 重制Airflow数据库

将 dag_transform.py 文件放入 airflow/dags/ 下,然后重置 airflow 数据库:airflow resetdb

4. 运行

在airflow里手动执行这个DAG,可以看到这个DAG已经开始运行:

查看 dag_transform 可以看到已经在运行启动emr的脚本了

[[2020-03-12 12:42:54,197] {bash_operator.py:105} INFO - Temporary script location: /tmp/airflowtmptwdg7a_6/create_emr_clusterlbzuu36e
[2020-03-12 12:42:54,197] {bash_operator.py:115} INFO - Running command: python3 /home/hadoop/scripts/launch_emr.py

可以看到 EMR 集群正在启动:

t1 spark wordcount 开始执行:

t2 完成后,t3 hive query 开始执行:

最后,整个DAG执行完毕:

我们也可以看到EMR集群开始自动终止:

参考文档:

https://aws.amazon.com/cn/blogs/china/dynamic-start-stop-of-emr-cluster-with-airflow-and-remote-submission-of-tasks-via-livy/

airflow(二)集成EMR使用的更多相关文章

  1. Asp.NetCoreWebApi图片上传接口(二)集成IdentityServer4授权访问(附源码)

    写在前面 本文地址:http://www.cnblogs.com/yilezhu/p/9315644.html 作者:yilezhu 上一篇关于Asp.Net Core Web Api图片上传的文章使 ...

  2. Springboot整合二 集成 rabbitmq

    1.在application.yml文件中进行RabbitMQ的相关配置先上代码 spring: rabbitmq: host: 192168.21.11 port: username: guest ...

  3. Apache CXF实战之二 集成Sping与Web容器

    本文链接:http://blog.csdn.net/kongxx/article/details/7525481 Apache CXF实战之一 Hello World Web Service 书接上文 ...

  4. Spring boot后台搭建二集成Shiro实现用户验证

    上一篇文章中介绍了Shiro 查看 将Shiro集成到spring boot的步骤: (1)定义一个ShiroConfig,配置SecurityManager Bean,SecurityManager ...

  5. SpringBoot进阶教程(二十二)集成RabbitMQ---MQ实战演练

    RabbitMQ是一个在AMQP基础上完成的,可复用的企业消息系统.他遵循Mozilla Public License开源协议.RabbitMQ是流行的开源消息队列系统,用erlang语言开发.Rab ...

  6. Spring boot后台搭建二集成Shiro权限控制

    上一篇文章,实现了用户验证 查看,接下来实现下权限控制 权限控制,是管理资源访问的过程,用于对用户进行的操作授权,证明该用户是否允许进行当前操作,如访问某个链接,某个资源文件等 Apache Shir ...

  7. Spring boot后台搭建二集成Shiro添加Remember Me

    上一片文章实现了用户验证  查看 当用户成功登录后,关闭浏览器,重新打开浏览器访问http://localhost:8080,页面会跳转到登录页,因为浏览器的关闭后之前的登录已失效 Shiro提供了R ...

  8. iOS开发之集成iOS9中的Core Spotlight Framework搜索App的内容

    Spotlight在iOS9上做了一些新的改进, 也就是开放了一些新的API, 通过Core Spotlight Framework你可以在你的app中集成Spotlight.集成Spotlight的 ...

  9. Spring+Struts集成(第二种方案)

    在上一篇文章中我们了解到了第一种Spring跟Struts集成的方案,但此集成方案的不足是WEB层中知道Spring的相关内容,因为需要去主动的查找对象:BeanFactory.方案二便是通过依赖注入 ...

  10. iOS支付宝,微信,银联支付集成封装(上)

    一.集成支付宝支付 支付宝集成官方教程https://docs.open.alipay.com/204/105295/ 支付宝集成官方demo https://docs.open.alipay.com ...

随机推荐

  1. XYCTF pwn部分题解 (部分题目详解)

    hello_world(签到) 思路: 这道题就是利用printf函数泄露libc的基地址,然后再次进行栈溢出通过system,/bin/sh来获取shell wp: invisible_flag 思 ...

  2. SAP Adobe Form 教程三 日期,时间,floating field

    前文: SAP Adobe Form 教程一 简单示例 SAP Adobe Form 教程二 表 原文标题:SAP Adobe Interactive Form Tutorial. Part III. ...

  3. 简说Python之数字和变量

    目录 Python的运算 Python关于进制的一些描述 十六进制的显示 八进制和二进制的显示 转成二进制,八进制,十六进制的方法 二,八,十六进制转回十进制的方法 Python变量 数字类型 浮点数 ...

  4. 国外anonfiles网盘大文件下载器

    各位注意了,这个网站很久以前是可以国内直接访问的,后来被墙了,但仍然可以使用代理下载,现如今,6天前大概2023年8月10号左右这个网站已经挂了,就是彻底不能用了,所有与之有关的东西比如网页,都是假的 ...

  5. Windows远程连接工具有哪些

    Windows远程连接工具,一般称为远程桌面软件,更准确的叫远程访问软件或远程控制软件,可以让你从一台电脑远程控制另一台电脑.远程桌面软件允许您控制连接的计算机,就好像它就在您面前一样. 远程桌面工具 ...

  6. Java面试题:让依赖注入变得简单,面对@Autowired和@Resource,该如何选择?

    @Autowired和@Resource都是Java Spring框架中的注解,用于实现依赖注入(DI)和控制反转(IoC).它们的区别主要在以下三个方面: 源头不同  @Autowired是Spri ...

  7. java学习之旅(day.02)

    java运行机制 编译型:转换为计算机可读的语言 解释型:用什么,读什么 预编译:java文件(源程序)通过javac命令到class文件,class文件(类)放入类加载器,这个类就加载到JVM中了, ...

  8. dbeaver使用详解

    1.dbeaver使用本地驱动 解压 点击可执行文件 驱动管理 新建驱动 起名字 com.mysql.jdbc.Driver jdbc:mysql//{host}[:{port}]/[{databas ...

  9. CentOS搭建Jellyfin影音服务器

    一. 安装Jellyfin 之前介绍过Docker安装jellyfin,但Docker安装方式存在一些限制,于是一起学习一下用RPM包在CentOS 7下安装方法. 先安装需要的依赖: yum ins ...

  10. 关于Zotero组件在office word中的添加

    引言:学姐问我,怎么弄Zotero,在调试过程中遇到的问题及解决方案 Q&A Zotero的安装 找到官网(https://www.zotero.org/)点击download,安装(个人觉得 ...