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 ...
随机推荐
- 微软开源 MS-DOS「GitHub 热点速览」
上周又是被「大模型」霸榜的一周,各种 AI.LLM.ChatGPT.Sora.RAG 的开源项目在 GitHub 上"争相斗艳".这不 Meta 刚开源 Llama 3 没几天,苹 ...
- LVS负载均衡(1)-- LVS概述及LVS网络模型
目录 1. 负载均衡集群概述 2. LVS理论基础 2.1 LVS常用术语 2.2 LVS数据调度原理 2.3 LVS工作模型 2.3.1 NAT模型 2.3.2 DR模型 2.3.3 TUNNEL模 ...
- C语言:输入一个整数并让其逆反输出。123->321
主要思想为: a)计算输入的位数有多少个 b)计算出最高位的单位(若最高位为是万位, 那么需要一个变量存储最高位数值1000) c)用取模的方法从个位数开始进行取出每一个单位上的数字 d)从个位数开始 ...
- 网络性能评估工具Iperf详解
一.网络性能评估工具Iperf 网络性能评估主要是监测网络带宽的使用率,将网络带宽利用最大化是保证网络性能的基础,但是由于网络设计不合理.网络存在安全漏洞等原因,都会导致网络带宽利用率不高.要找到网络 ...
- 一款基于C#开发的通讯调试工具(支持Modbus RTU、MQTT调试)
前言 今天大姚给大家分享一款基于C#.WPF.Prism.MaterialDesign.HandyControl开发的通讯调试工具(支持Modbus RTU.MQTT调试,界面色彩丰富):Wu.Com ...
- 一些常用但是不好记的css样式
设置滚动条样式 /*定义滚动条宽高及背景,宽高分别对应横竖滚动条的尺寸*/ ::-webkit-scrollbar { width: 10px; /*对垂直流动条有效*/ height: 10px; ...
- u8二次开发再遇问题再总结
在调用api生成采购入库单时,报错:该操作会造成订单到货和入库同时存在,请重新检查操作!普通采购必有订单,存货[0501-0304-0075]不能手工录入 这是因为:采购入库单单据必须要录入上游单据, ...
- 记一次 .NET某企业数字化平台 崩溃分析
一:背景 1. 讲故事 前些天群里有一个朋友说他们软件会偶发崩溃,想分析看看是怎么回事,所幸的是自己会抓dump文件,有了dump就比较好分析了,接下来我们开始吧. 二:WinDbg 分析 1. 程序 ...
- 鸿蒙极速入门(三)-TypeScript语言简介
ArkTS是HarmonyOS优选的主力应用开发语言.ArkTS围绕应用开发在TypeScript(简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是TS的超集.因此,在学习ArkTS语言之 ...
- 抖音越狱版本App下载
一.准备下载越狱版本抖音App 一般下载越狱版本App要不从越狱手机上Crack 正版App,另外一种从PP助手或者越狱市场进行下载,这里选择第二种方式 感谢 http://iosre.com/t/p ...