管理工作流与Apache气流(MWAA) -如何禁用任务运行依赖于以前的运行



我有一个Apache气流管理环境,其中定义和启用了许多dag。一些dag是计划好的,按15分钟的计划运行,而另一些则没有计划。所有的dag都是单任务的dag。dag的结构如下:

2级dag ->(触发)1级DAG ->(触发)0级DAG

计划的dag为2级dag,未计划的dag为1级和0级dag。0级DAG使用ECSOperator调用预定义的弹性容器服务(ECS)任务,调用ECS任务中定义的Docker容器中的Python ETL脚本。第2级DAG等待第1级DAG完成,而第1级DAG又等待第0级DAG完成。ETL脚本生成的完整Python日志可以在ECS任务运行的CloudWatch日志中看到,而气流任务日志只显示高级日志。

计划DAG(级别2)中的单个任务将depends_on_past设置为False,并且我预计,结果是2级DAG的连续计划运行不会相互依赖,即如果特定运行失败,它不会阻止下一个计划运行的发生。但是正在发生的事情是气流覆盖了这一点,我可以清楚地看到在UI中,一个特定的2级DAG运行的失败正在阻止下一个运行被调度程序选择-下一个计划的运行状态被设置为None,我必须手动清除失败的DAG运行状态,然后调度程序可以再次调度它。

为什么会发生这种情况?据我所知,在2级DAG任务中,没有气流配置选项可以覆盖Falsedepends_on_past的任务级别设置。如能指点,不胜感激。

回答"为什么会发生这种情况?"我理解你正在观察的行为是由任务被定义为wait_for_downstream = True这一事实来解释的。文档说明如下:

wait_for_downstream(bool)——当设置为true时,任务X的实例将等待任务X的前一个实例的下游的任务成功完成或在运行之前被跳过。如果任务X的不同实例改变了相同的资产,并且该资产由任务X的下游任务使用,则这很有用。注意,在使用wait_for_downstream的地方,depends_on_past被强制为True。还要注意,只等待前一个任务实例的下游的任务;

任何更下游的任务状态将被忽略。

请记住,任务X的前一个实例指最近一次调度的dag_run的task_instance,而不是上游的Task(在每日调度的DAG中,该task_instance来自"昨天")。

这也解释了为什么你的任务在清除之前的DAG运行状态后正在执行。

我希望它能帮助你澄清事情!

最新更新