我们使用airflow的其中一个原因,就是管理任务流,及任务流之间的依赖关系。

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