我想在Airflow中创建一个条件任务,如下面的架构所述。预期的情况如下:
我试过了:
trigger_rule=TriggerRule.ONE_FAILED
任务4保持跳过状态,all_done也
trigger_rule=TriggerRule.ALL_DONE
我认为这个解决方案:How to create a conditional task in Airflow但它对我不起作用。
答案 0 :(得分:2)
我认为无论先前的任务是否成功,您都希望终止群集,因此ALL_DONE
听起来合适。除了Start_Cluster。如果失败,则可能没有终止群集,尽管您可能需要检查/尝试以防万一。
默认的trigger_rule是ALL_SUCCESS
,因此,例如,如果任务1失败,整个Dag将失败,因为任务2要求任务1成功才能运行。
如果任何任务可能失败,但您仍想终止群集,则需要一些备用途径来跟随dag,例如:使用PythonBranchOperator
和Python回调函数。
另一种可能性是使用一个以“ONE_FAILURE”的trigger_rule运行的虚拟运算符,然后运行Terminate Cluster任务。
例如,如果您将虚拟任务命名为“Task_Failure”,则这将是依赖关系链:
Start_Cluster >> Task_2 >> Task_3 >> Terminate_Cluster
Task_2 >> Task_Failure
Task_3 >> Task_Failure
Task_Failure >> Terminate_Cluster
在这种情况下,Task_Failure可能必须将Terminate_Cluster trigger_rule设置为ONE_SUCCESS
,因为某些任务可能永远不会运行。如果您已将最终任务设置为ALL_DONE
以及之前的一些任务没有状态,它可能只是挂起或可能失败。
ALL_DONE和ALL_SUCCESS之间的区别:https://stackoverflow.com/a/47716981/1335793