Airflow 概念梳理
有向无环图
Airflow 基于一个重要的数据结构,DAG。
为什么依赖 DAG?
LInux 与 WIndows 的 crontab 与任务计划,只可以配置定时任务或间隔任务,无法配置作业间的依赖关系。
一个很大的弊端是,如果我们需要在作业 A 执行之后才有供作业 B 执行的数据,而出现了不可因素导致轮到作业 B 执行的时候作业 A 还未执行完毕。这必定会导致数据缺失,或作业 B 执行失败。
所以,使用有向无环图来定义作业流,在任务调度中是非常合适的。
基础服务
Webserver
是 Airflow 的基础服务,提供了前端可视化管理工具,可视化才是最好的!
你可以在上面执行调度操作,查看任务处理耗时分析,清除状态作业重跑,查看日志,管理用户和数据连接,以及配置的 DAG 是否正确等。
Scheduler
也是 Airflow 的基础服务之一,身为调度器,负责监控 DAG 的状态,计算调度时间,启动满足条件的 DAG,并将任务提交到 Executor。
Worker
工作节点,这个角色类似于 yarn 中的 namenode,直接负责 Executor 的执行分配。
ps: yarn 为 hadoop 中的资源管理系统
Executor
Airflow 有三种执行器
SequentialExecutor
顺序执行器,无需额外配置,默认使用 sqlite 作为元数据,因此也无法支持任务之间的并发操作。
LocalExecutor
本地执行器,不支持 sqlite,但可使用 mysql、oracle、postgress 等主流数据库,需配置数据库链接 URL。
CeleryExecutor
江湖人称芹菜,是一款基于消息队列的分布式异步任务调度工具,可将任务运行在千里之外(远程节点),十分优秀!
ps: 需执行 Airflow 的工作节点
airflow worker
pps: 需额外安装
Redis
或RabbitMQ
等
其他
Operators
有了作业流,就得有作业内容,Operators 就是做这事的。
Airflow 目前支持十多种不同的作业类型
- BashOperator
- PythonOperator
- DockerOperator
- DruidCheckOperator
- EmailOperator
- HiveOperator
- HTTPOperator
- DummyOperator
- ……
他们的作用都像字面意思说的那样,可完成相应的操作或调用。
值得注意的是 DummyOperator,是个空操作,相当于标记和中转节点。
当然,他们有一个共同的爸爸「BaseOperator」,中央集权,他一人的修改会改变儿子们继承到的功能。
Timezone
在 1.9 版本及以前,Airflow 使用的是本地时间,不同服务器时区不同容易产生运行错误。
而在 1.10 中,加入了自定义的时区配置(1.9 的时区配置无法生效,大坑。。)
预警与监控
当任务执行失败或状态异常时,发送短信或邮件。
这是个棒棒的功能,守卫再严的城池也有失守的时候,硝烟一起,家书即刻送达。
你说,这为镇守襄阳城提供多少便利?