文章目录
AirFlow详细介绍及各自调度方式
一、AirFlow是什么
airflow 是一个编排、调度和监控workflow的平台,由Airbnb开源,现在在Apache Software Foundation 孵化。airflow 将workflow编排为由tasks组成的DAGs(有向无环图),调度器在一组workers上按照指定的依赖关系执行tasks。同时,airflow 提供了丰富的命令行工具和简单易用的用户界面以便用户查看和操作,并且airflow提供了监控和报警系统。
Airflow的调度依赖于crontab命令,与crontab相比airflow可以直观的看到任务执行情况、任务之间的逻辑依赖关系、可以设定任务出错时邮件提醒、可以查看任务执行日志。
而crontab命令管理的方式存在以下几方面的弊端:
1、在多任务调度执行的情况下,难以理清任务之间的依赖关系;
2、不便于查看当前执行到哪一个任务;
3、任务执行失败时不便于查看执行日志,也即不方便定位报错的任务和错误原因;
4、不便于查看调度流下每个任务执行的起止消耗时间,这对于优化task作业是非常重要的;
5、不便于记录历史调度任务的执行情况,而这对于优化作业和错误排查是很重要的;
1、优劣势分析
未使用airflow | 使用airflow |
---|---|
需要自己添加调度代码、调试复杂、功能单一、缺乏整体调度能力 | 框架调度,简单易用,更稳定,功能全面,可以整体调度 |
缺乏图形化能力,给任务的新增、排查等操作带来很多困难。特别是当任务较多,结构复杂的时候 | 内置树状图和流程图,清晰明了的展现任务拓扑结构 |
需要自己添加任务实时监测代码 | 任务实时状态返回网页界面,方便管理和查看 |
任务的各种操作大多需要编码或命令行完成,不够高效 | 常见操作方式转化为图形化界面,高效清晰 |
需要手动分离调度和业务代码 | 调度和业务代码分离,减少耦合性,方便运维和迭代 |
除了以上的优点,工程实践中有一个不足就是分布式部署有点麻烦,容易出错。
二、AirFlow中的作业和任务
1、DAG
概要:DAG(Directed Acyclic Graph)是有向无环图,也称为有向无循环图。在Airflow中,一个DAG定义了一个完整的作业。同一个DAG中的所有Task拥有相同的调度时间。
参数:
- dag_id: 唯一识别DAG,方便日后管理
- default_args: 默认参数,如果当前DAG实例的作业没有配置相应参数,则采用DAG实例的default_args中的相应参数
- schedule_interval: 配置DAG的执行周期,可采用crontab语法
2、Task
概要:Task为DAG中具体的作业任务,依赖于DAG,也就是必须存在于某个DAG中。Task在DAG中可以配置依赖关系(当然也可以配置跨DAG依赖,但是并不推荐。跨DAG依赖会导致DAG图的直观性降低,并给依赖管理带来麻烦)。
参数:
- dag: 传递一个DAG实例,以使当前作业属于相应DAG
- task_id: 给任务一个标识符(名字),方便日后管理
- owner: 任务的拥有者,方便日后管理
- start_date: 任务的开始时间,即任务将在这个时间点之后开始调度