这是个啥?
“一个平台,一个管理任务流程的任务调度工具。”
使用python编写的一个平台,用来author、schedule和monitor workflows.
Airflow is a platform to programmatically author, schedule and monitor workflows.
Airflow 是通过 DAG(Directed acyclic graph 有向无环图)来管理任务流程的任务调度工具,不需要知道业务数据的具体内容,设置任务的依赖关系即可实现任务调度。
装一下官网上的东西试试
https://airflow.apache.org/docs/apache-airflow/stable/start/local.html
- 用的是pip install装
- 默认端口是8080,修改配置在
$AIRFLOW_HOME/airflow.cfg
- 本地启动时,用的命令是
airflow standalone
, 在生产环境中,不要带standalone
DAG是啥
DAG (Directed acyclic graph )中的每个节点都是一个任务,DAG 中的边表示的是任务之间的依赖(强制为有向无环,因此不会出现循环依赖,从而导致无限执行循环)。
Airflow 在 ETL 上的实践
(ETL的介绍见另一篇)ETL 一词较常用在数据仓库,Airflow 在解决 ETL 任务各种依赖问题上的能力恰恰是我们所需要的。
airflow pipeline的本质是什么?
a Python script that happens to define an Airflow DAG object.
代码里的体现:from airflow import DAG
Airflow 核心概念
- DAGs:即有向无环图(Directed Acyclic Graph),将所有需要运行的tasks按照依赖关系组织起来,描述的是所有tasks执行顺序。
- Operators:(我感觉就是一些内置方法。。)可以简单理解为一个class,描述了DAG中某个的task具体要做的事。
- Tasks:Task 是 Operator的一个实例,也就是DAGs中的一个node。
- Task Instance:task的一次运行。Web 界面中可以看到task instance 有自己的状态,包括"running", “success”, “failed”, “skipped”, "up for retry"等。
- Task Relationships:DAGs中的不同Tasks之间可以有依赖关系,如 Task1 >> Task2,表明Task2依赖于Task2。
通过将DAGs和Operators结合起来,用户就可以创建各种复杂的 工作流(workflow)。
operators
- BashOperator - 执行 bash 命令或脚本。
- SSHOperator - 执行远程 bash 命令或脚本(原理同 paramiko 模块)。
- PythonOperator - 执行 Python 函数。
- EmailOperator - 发送 Email。
- HTTPOperator - 发送一个 HTTP 请求。
- MySqlOperator, SqliteOperator, PostgresOperator, MsSqlOperator, OracleOperator, JdbcOperator, 等,执行 SQL 任务。
- DockerOperator, HiveOperator, S3FileTransferOperator, PrestoToMysqlOperator, SlackOperator 你懂得。
- 除了以上这些 Operators 还可以方便的自定义 Operators 满足个性化的任务需求。
使用时区时注意
Creating a time zone aware DAG is quite simple. Just make sure to supply a time zone aware dates using
pendulum
. Don’t try to use standard library timezone as they are known to have limitations and we deliberately disallow using them in DAGs.
import pendulum