最近工作需要,使用airflow搭建了公司的ETL系统,顺带在公司分享了一次airflow,整理成文,Enjoy!
1. airflow 介绍
1.1 airflow 是什么
Airflow is a platform to programmatically author, schedule and monitor workflows.
airflow 是一个编排、调度和监控workflow的平台,由Airbnb开源,现在在Apache Software Foundation 孵化。airflow 将workflow编排为tasks组成的DAGs,调度器在一组workers上按照指定的依赖关系执行tasks。同时,airflow 提供了丰富的命令行工具和简单易用的用户界面以便用户查看和操作,并且airflow提供了监控和报警系统。
1.2 airflow 核心概念
- DAGs:即有向无环图(Directed Acyclic Graph),将所有需要运行的tasks按照依赖关系组织起来,描述的是所有tasks执行的顺序。
- Operators:可以简单理解为一个class,描述了DAG中一个具体的task具体要做的事。其中,airflow内置了很多operators,如
BashOperator
执行一个bash 命令,PythonOperator
调用任意的Python 函数,EmailOperator
用于发送邮件,HTTPOperator
用于发送HTTP请求,SqlOperator
用于执行SQL命令...同时,用户可以自定义Operator,这给用户提供了极大的便利性。 - Tasks:Task 是 Operator的一个实例,也就是DAGs中的一个node。
- Task Instance:task的一次运行。task instance 有自己的状态,包括"running", "success", "failed", "skipped", "up for retry"等。
- Task Relationships:DAGs中的不同Tasks之间可以有依赖关系,如
TaskA >> TaskB
,表明TaskB依赖于TaskA。
通过将DAGs和Operators结合起来,用户就可以创建各种复杂的 workflow了。
1.3 其它概念
- Connections: 管理外部系统的连接信息,如外部MySQL、HTTP服务等,连接信息包括
conn_id
/hostname
/login
/password
/schema
等,可以通过界面查看和管理,编排workflow时,使用conn_id
进行使用。 - Pools: 用来控制tasks执行的并行数。将一个task赋给一个指定的
pool
,并且指明priority_weight
,可以干涉tasks的执行顺序。 - XComs:在airflow中,operator一般(not always)是原子的&#x