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. kubenetes1.26中安装kubesphere3.4版本

    一.安装前环境准备 # kubesphere官网:https://kubesphere.io/zh/docs/v3.4/introduction/what-is-kubesphere/ # 1.kub ...

  2. git将本地项目关联远程仓库并上传到新分支

    混合项目开发,项目交接的时候没做好,新入职接手老项目的时候一脸懵逼,进入开发阶段时,越搞越不对,越搞越不对,总感觉 本地跑的项目和己方测试环境以及客户的测试环境和目标环境不一致,结果发现着手的两套代码 ...

  3. Go-Zero微服务快速入门和最佳实践(一)

    前言 并发编程和分布式微服务是我们Gopher升职加薪的关键. 毕竟Go基础很容易搞定,不管你是否有编程经验,都可以比较快速的入门Go语言进行简单项目的开发. 虽说好上手,但是想和别人拉开差距,提高自 ...

  4. 05 elasticsearch学习笔记-基本CRUD

    目录 视频教程 4.1 基本CRUD 4.2 URI查询 按时间段查 视频教程 Elasticsearch(7.8.1)沥血之作(包含仿百度搜索案例) https://www.bilibili.com ...

  5. JOISC2019 题解

    \(\text{By DaiRuiChen007}\) Contest Link A. Examination Problem Link 题目大意 有 \(n\) 个二元组 \((a,b)\) 和 \ ...

  6. vue学习笔记之父组件子组件的传值

    一  在前端开发过程中,很多情况下一个页面无法装载大部分的代码,所以需要子组件来完成父组件的任务,下面我来展示一下,组件之间如何进行传值以及常见的坑,首先上代码 1.1   父组件代码 <tem ...

  7. vue3:modal组件开发

    项目环境 @vue/cli 4.5.8 最终效果 需求分析 显示/隐藏 点击遮罩层能否关闭 宽度和zIndex自定义 标题栏 -显示标题和关闭按钮 主体 底部 -内置取消和确定功能 前置知识 tele ...

  8. 深入理解Docker原理

    本文参考转载至:<深入剖析Kubernetes - 张磊> 更过优秀博文请关注:https://blog.bigcoder.cn 容器技术的核心功能,就是通过约束和修改进程的动态表现,从而 ...

  9. 005. gitlab安装

    1. gitlab介绍 官方网站: www.gitlab.com gitlab是一款使用ruby编写的代码版本管理系统,他可以通过web界面来管理代码. 2. gitlab安装 官方安装文档: htt ...

  10. iOS符号表手工还原

    1.通过Xcode的Device工具导出app.crash文件 2.将.crash 和 .dSYM符号 app放在同一个目录中 3.寻找symbolicatecrash,将symbolicatecra ...