Airflow 气流取决于整个DAG的过去

Airflow 气流取决于整个DAG的过去,airflow,apache-airflow,airflow-scheduler,Airflow,Apache Airflow,Airflow Scheduler,是否有一种方法可以在整个DAGROUN中使用dependens\u pass,而不仅仅是应用于任务 我有一个每日DAG,周五的DAG跑步在第四个任务中出错,但是周六和周日的DAG跑步仍然按计划进行。使用dependens\u on\u pass=True将暂停第4个任务上的DAG运行,但是前3个任务仍将运行 我可以看到在DagRun DB表中有一个状态列,其中包含运行的失败。我想要的是一种将DagRun配置为在前一个DagRun失败时不启动的方法,在找到之前失败的任务之前不启动并运行 有人知道这

是否有一种方法可以在整个DAGROUN中使用
dependens\u pass
,而不仅仅是应用于任务

我有一个每日DAG,周五的DAG跑步在第四个任务中出错,但是周六和周日的DAG跑步仍然按计划进行。使用
dependens\u on\u pass=True
将暂停第4个任务上的DAG运行,但是前3个任务仍将运行

我可以看到在DagRun DB表中有一个
状态
列,其中包含运行的
失败
。我想要的是一种将DagRun配置为在前一个DagRun失败时不启动的方法,在找到之前失败的任务之前不启动并运行


有人知道这是否可行吗?

一种可能的解决方案是使用
xcom

  • 向DAG中添加2个Python操作符
    start_task
    end_task
  • 使所有其他任务依赖于
    start\u任务
  • 使
    结束任务
    依赖于所有其他任务(
    设置上游
  • end\u task
    将始终将变量
    last\u success=context['execution\u date']
    推送到xcom(
    xcom\u push
    )。(在PythonOperators中需要
    provide\u context=True
  • start_task
    将始终检查xcom(
    xcom_pull
    ),以查看是否存在值等于上一次DAG运行的执行日期或DAG的开始日期(让流程启动)的
    last_success
    变量 xcom的使用示例:

    在您的第一个任务中,set
    取决于\u pass=True
    wait\u for\u down=True
    ,只有在最后一次运行成功时,组合才会导致当前dag运行

    因为在当前dag运行时设置第一个任务会等待上一个任务
    (取决于过去)和所有任务(等待下游)成功

    这个问题有点老了,但它是第一个谷歌搜索结果,评分最高的答案显然是误导性的(这让我有点挣扎),所以它肯定需要一个正确的答案。虽然第二级答案应该有效,但有一种更干净的方法可以做到这一点,我个人觉得使用xcom很难看

    气流有一个特殊的操作员类,用于监控其他dag运行或其他dag整体的任务状态。因此,我们需要做的是在dag中的所有任务之前添加一个任务,检查上一次运行是否成功

    from airflow.sensors.external_task_sensor import ExternalTaskSensor
    
    
    previous_dag_run_sensor = ExternalTaskSensor(
        task_id = 'previous_dag_run_sensor',
        dag = our_dag,
        external_dag_id = our_dag.dag_id,
        execution_delta = our_dag.schedule_interval
    )
    
    previous_dag_run_sensor.set_downstream(vertices_of_indegree_zero_from_our_dag)
    

    无论在哪里使用wait-for-down,dependens-on-pass都会被强制为True。这个答案是错误的,并且不符合提问者的要求。这个答案对于这个问题是正确的:不同意@PriksoNAI-答案是正确的
    wait_for_downstream
    是一种增强
    依赖于过去的配置
    dependens\u on\u pass
    将只检查上一个任务(因此在给出的示例中,步骤1-3仍将在星期六运行)
    wait_for_down
    进一步检查上一次运行的所有下游任务是否也成功。在给出的示例中,这意味着步骤1不会在星期六运行,因为星期五的步骤4失败,这是在星期五的步骤1的下游。同意@PriksoNAI。我刚检查过。我在我的DAG上将
    依赖于过去的
    等待下游的
    设置为
    True
    ,如果我手动一次两次触发它,我会看到第二个实例不会等待第一个成功。@Jacobian with
    依赖于过去的=True
    ,“上一个任务实例需要已经成功。”(除非是该任务的第一次运行)。我认为,由于您的两个实例都并行运行,Airflow无法确定哪一个是第一次运行。可能Airflow只检查已完成的运行和当前未运行的运行,而确定哪一个是第一次运行,哪一个不是。可能有人可以确认这一点。@PriksoNAI的可能重复项,并且该问题具有正确的answ呃。