Airflow
最近在弄画像标签每天
ETL
的调度事情,
这篇文章分享一下一个开源的
ETL
工具
Airflow
。
一、基础概念
Airflow
是
Airbnb
内部发起并开源的一个
ETL
管理平台,使用
Python
编写实现的任务管
理
、
调
度
、
监
控
工
作
流
平
台
。
这
是
其
官
方
文
档
地
址
:
Apache
Airflow
(incubating)
Documentation
,关于
airflow
产品的使用,里面有详细的介绍。
Airflow
的调度依赖于
crontab
命令,
与
crontab
相比
airflow
可以直观的看到任务执行情况、
任务之间的逻辑依赖关系、可以设定任务出错时邮件提醒、可以查看任务执行日志。
而
crontab
命令管理的方式存在以下几方面的弊端:
1
、在多任务调度执行的情况下,难以理清任务之间的依赖关系;
2
、不便于查看当前执行到哪一个任务;
3
、任务执行失败时不便于查看执行日志,也即不方便定位报错的任务和错误原因;
4
、不便于查看调度流下每个任务执行的起止消耗时间,这对于优化
task
作业是非常重要
的;
5
、不便于记录历史调度任务的执行情况,而这对于优化作业和错误排查是很重要的;
Airflow
中有两个最基本的概念:
DAG
和
task
,下面主要介绍一下。
DAG
是什么:
DAG
是
Directed
Acyclic
Graph
的缩写,即有向无环图。是所有要执行任务脚本
(
即
task)
的集合,在这个
DAG
中定义了各个
task
的依赖关系、调度时间、失败重启机制等。通过
DAGid
来标识每个
DAG
任务
每个
DAG
是由
1
到多个
task
组成
task
是什么:
task
是具体执行的任务脚本,可以是一个命令行
(BashOperator)
,也可以是
python
脚本等。