我有一个DAG,并行地向多个独立单元扇出。这在AWS中运行,因此我们有一些任务可以将我们的AutoScalingGroup扩展到DAG启动时的最大工作数,并在DAG完成时达到最小值。简化版本如下所示:
| - - taskA - - |
| |
scaleOut - | - - taskB - - | - scaleIn
| |
| - - taskC - - |
但是,并行集中的某些任务偶尔会失败,并且当任何A-C任务失败时,我无法运行scaleDown任务。
一旦所有其他任务完成(成功或失败),在DAG结束时执行任务的最佳方法是什么? depends_on_upstream设置听起来像我们需要的,但实际上并没有根据测试做任何事情。
答案 0 :(得分:16)
所有运算符都有一个参数trigger_rule
,可以设置为'all_done'
,无论前一个任务是否失败或成功,都会触发该任务。
您可以将要运行的任务的触发规则设置为'all_done'
,而不是默认'all_success'
。
使用该参数的简单bash运算符任务如下所示:
task = BashOperator(
task_id="hello_world",
bash_command="echo Hello World!",
trigger_rule="all_done",
dag=dag
)