标题: airflow的check机制介绍
日期: 2021-12-18 11:26:14
标签: [airflow,check]
分类: 调度系统
我们使用airflow的其中一个原因,就是管理任务流,及任务流之间的依赖关系。
传统的任务调度,大概就是通过linux自带的crontab方式进行任务的定时调度,那么如果crontab任务过多,crontab表达式是按照顺序执行的,那么怎么完成复杂的依赖问题呢。
airflow就可以解决复杂的依赖问题,任务流之间如何串行、并行执行,只需定义一个crontab表达式即可,但是这个表达式,不是交给linux,而是有airflow自己的调度引擎,去发现该任务是否到时间点去执行了。
那么airflow是怎样解决任务流之间的依赖问题的呢?
task之间依赖关系
看下图:
在dag的定义文件中,包含了task的定义及task之间的依赖关系,依赖关系有2中方式:
task1 >> task2
task1.set_downstream(task2)
task2.set_upstream(task1)
上面的三种定义task依赖关系的模式,表示task2是task1的下游。
dag之间依赖关系
目前airflow提供的dag之间依赖关系是一种sensor:ExternalTaskSensor
它可以添加如下几个主要参数:
external_dag_id --上游dag_id
external_task_id --上游task_id,如果不设置,那么检查dag状态
execution_delta --上游与本任务调度时间差
execution_date_fn --上游与本任务调度时间差计算方法
总结一下
总结一下,如果任务量非常多,dag任务达到千个级别,那么依赖关系会非常复杂,而且面对频繁的变动dag调度时间,如果上游改变了调度时间,下游的依赖时间差execution_delta
没做相应的改变,那么会依赖失败,所以,airflow自带的dag之间依赖会有缺陷。
目前我们生产上的解决办法就是,重写check,下游dag不依赖上游dag的具体时间,而是根据上游设置的调度时间schedule_interval
计算出来对应的调度时间,进行检查,上游上一批次的状态,这样就完美解决了上游修改调度时间,导致下游check失败的问题,因为下游的check机制,会自动获取上游的调度时间。
ok,今天就到这里,如果你们还有什么地方不了解的,可以跟我提。
我的邮箱是:
chenzuoli709@163.com
Keep reading, Keep writing, Keep coding.
欢迎关注我的微信公众号,比较喜欢分享知识,也喜欢宠物,所以做了这2个公众号:
喜欢宠物的朋友可以关注:【电巴克宠物Pets】
一起学习,一起进步。