airflow(二)集成EMR使用
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集群开始自动终止:

参考文档:
airflow(二)集成EMR使用的更多相关文章
- Asp.NetCoreWebApi图片上传接口(二)集成IdentityServer4授权访问(附源码)
写在前面 本文地址:http://www.cnblogs.com/yilezhu/p/9315644.html 作者:yilezhu 上一篇关于Asp.Net Core Web Api图片上传的文章使 ...
- Springboot整合二 集成 rabbitmq
1.在application.yml文件中进行RabbitMQ的相关配置先上代码 spring: rabbitmq: host: 192168.21.11 port: username: guest ...
- Apache CXF实战之二 集成Sping与Web容器
本文链接:http://blog.csdn.net/kongxx/article/details/7525481 Apache CXF实战之一 Hello World Web Service 书接上文 ...
- Spring boot后台搭建二集成Shiro实现用户验证
上一篇文章中介绍了Shiro 查看 将Shiro集成到spring boot的步骤: (1)定义一个ShiroConfig,配置SecurityManager Bean,SecurityManager ...
- SpringBoot进阶教程(二十二)集成RabbitMQ---MQ实战演练
RabbitMQ是一个在AMQP基础上完成的,可复用的企业消息系统.他遵循Mozilla Public License开源协议.RabbitMQ是流行的开源消息队列系统,用erlang语言开发.Rab ...
- Spring boot后台搭建二集成Shiro权限控制
上一篇文章,实现了用户验证 查看,接下来实现下权限控制 权限控制,是管理资源访问的过程,用于对用户进行的操作授权,证明该用户是否允许进行当前操作,如访问某个链接,某个资源文件等 Apache Shir ...
- Spring boot后台搭建二集成Shiro添加Remember Me
上一片文章实现了用户验证 查看 当用户成功登录后,关闭浏览器,重新打开浏览器访问http://localhost:8080,页面会跳转到登录页,因为浏览器的关闭后之前的登录已失效 Shiro提供了R ...
- iOS开发之集成iOS9中的Core Spotlight Framework搜索App的内容
Spotlight在iOS9上做了一些新的改进, 也就是开放了一些新的API, 通过Core Spotlight Framework你可以在你的app中集成Spotlight.集成Spotlight的 ...
- Spring+Struts集成(第二种方案)
在上一篇文章中我们了解到了第一种Spring跟Struts集成的方案,但此集成方案的不足是WEB层中知道Spring的相关内容,因为需要去主动的查找对象:BeanFactory.方案二便是通过依赖注入 ...
- iOS支付宝,微信,银联支付集成封装(上)
一.集成支付宝支付 支付宝集成官方教程https://docs.open.alipay.com/204/105295/ 支付宝集成官方demo https://docs.open.alipay.com ...
随机推荐
- 设计模式之装饰器-AOP
HelloWorld简单例子如下:此例子好好体会下继承 is a和组合 has a的异同. using System; using System.Runtime.InteropServices; na ...
- Mybatis逆向工程的2种方法,一键高效快速生成Pojo、Mapper、XML,摆脱大量重复开发
一.写在开头 最近一直在更新<Java成长计划>这个专栏,主要是Java全流程学习的一个记录,目前已经更新到Java并发多线程部分,后续会继续更新:而今天准备开设一个全新的专栏 <E ...
- python教程6.1-模块和包
模块分类 1.内置标准模块(⼜称标准库)执⾏help('modules')查看所有python⾃带模块列表 2.第三⽅开源模块,可通过pip install 模块名 联⽹安装 3.⾃定义模块 模块导入 ...
- CentOS7离线部署JDK
一. 下载JDK 官网地址: https://www.oracle.com/java/technologies/downloads/#java18 网盘地址: 链接:https://pan.baidu ...
- UnityShader数学基础篇
Mathf Mathf和Math 1.Math是C#中封装好的用于数学计算的工具类,位于System命名空间中. 2.Mathf是Unity中封装好的用于数学计算的工具结构体,位于UnityEngin ...
- java学习之旅(day.06)
switch多选择结构 多选择结构还有一个实现方式就是switch case switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支 switch(expression ...
- 让智慧物联赋能高效生产, AIRIOT助力数字化油田转型升级
近年来,中国石油行业为了推进工业化和信息化深度融合,充分结合勘探开发.生产科研和经营管理的实际需求,积极通过信息化建设促进油田业务转型升级.在勘探开发与管理的领域中,油气生产物联网系统是一个极其重 ...
- 单体项目使用Spring Security实现登陆认证授权
前端可以根据权限信息控制菜单和页面展示,操作按钮的显示.但这并不够,如果有人拿到了接口,绕过了页面直接操作数据,这是很危险的.所以我们需要在后端也加入权限控制,只有拥有操作权限,该接口才能被授权访问. ...
- 微服务实践k8s&dapr开发部署实验(2)状态管理
新建webapi项目 建项目时取消https支持,勾选docker支持, Program.cs中注释下面语句,这样部署后才能访问Swagger // Configure the HTTP reques ...
- Swoole 源码分析之 TCP Server 模块
首发原文链接:https://mp.weixin.qq.com/s/KxgxseLEz84wxUPjzSUd3w 大家好,我是码农先森. 今天我们来分析 TCP Server 模块 的实现原理,下面这 ...