我正在使用Airflow来安排批处理作业。我有一个每晚运行的DAG(A)和每月运行一次的另一个DAG(B)。 B取决于A已成功完成。但是B需要很长时间才能运行,因此我希望将其保存在单独的DAG中,以便更好地进行SLA报告。
如何在同一天成功运行DAG A,使DAG B运行?
答案 0 :(得分:30)
您可以使用名为ExternalTaskSensor的运算符来实现此行为。 DAG(B)中的任务(B1)将被安排并等待DAG(A)中的任务(A2)成功
答案 1 :(得分:7)
看起来也可以使用TriggerDagRunOperator,你可以使用python callable来添加一些逻辑。如下所述:https://www.linkedin.com/pulse/airflow-lesson-1-triggerdagrunoperator-siddharth-anand
答案 2 :(得分:2)
当需要跨DAG依赖性时,通常有两个要求:
B1
上的任务B
后,需要运行DAG A1
上的任务A
。如其他人所提到的,可以使用ExternalTaskSensor
来实现:
B1 = ExternalTaskSensor(task_id="B1",
external_dag_id='A',
external_task_id='A1',
mode="reschedule")
当用户清除DAG A1
上的任务A
时,我们希望Airflow清除DAG B1
上的任务B
以使其重新运行。这可以使用ExternalTaskMarker
(自Airflow v1.10.8起)来实现。
A1 = ExternalTaskMarker(task_id="A1",
external_dag_id="B",
external_task_id="B1")
有关更多详细信息,请参见有关跨DAG依赖关系的文档:https://airflow.apache.org/docs/stable/howto/operator/external.html