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: 需额外安装 RedisRabbitMQ

其他

Operators

有了作业流,就得有作业内容,Operators 就是做这事的。

Airflow 目前支持十多种不同的作业类型

  • BashOperator
  • PythonOperator
  • DockerOperator
  • DruidCheckOperator
  • EmailOperator
  • HiveOperator
  • HTTPOperator
  • DummyOperator
  • ……

他们的作用都像字面意思说的那样,可完成相应的操作或调用。

值得注意的是 DummyOperator,是个空操作,相当于标记和中转节点。

当然,他们有一个共同的爸爸「BaseOperator」,中央集权,他一人的修改会改变儿子们继承到的功能。

Timezone

在 1.9 版本及以前,Airflow 使用的是本地时间,不同服务器时区不同容易产生运行错误。

而在 1.10 中,加入了自定义的时区配置(1.9 的时区配置无法生效,大坑。。)

预警与监控

当任务执行失败或状态异常时,发送短信或邮件。

这是个棒棒的功能,守卫再严的城池也有失守的时候,硝烟一起,家书即刻送达。

你说,这为镇守襄阳城提供多少便利?