Airflow DAG多次运行

3

我有一个DAG,我希望在每次成功运行后运行多次。例如,我想运行它10次并停止。有办法实现这个目标吗?我尝试了使用CRON进行调度,但似乎不太干净;通过UI多次触发DAG不能正常工作(会并行运行)。

3个回答

3
我找到了适合我的使用情况的解决方案。它包含使用depends_on_past=True(由@Hitesh Gupta提到),并设置您的airflow.cfg文件如下:

# 每个DAG运行的最大活动次数 max_active_runs_per_dag = 1

这样我们就只能在一次活动DAG运行中,而且如果前一个运行失败,则不会继续下一个DAG运行。这是我测试的Airflow版本1.10.1。


0
  • 除了提供start_date,您还可以为您的DAG提供end_date
  • 引用docstring

:param start_date: 调度程序将尝试回溯的时间戳

:type start_date: datetime.datetime

:param end_date: 您的DAG不会在此日期之后运行,请将其保留为None以进行无限期调度

:type end_date: datetime.datetime


虽然不相关,但也请查看this文章中提到的airflow.cfg中的以下scheduler设置:

  • run_duration
  • num_runs

更新-1

  • 在他的文章使用apache airflow精确运行任务中,@Andreas P描述了一种聪明的技术,我相信可以适应您的用例。虽然这也不是非常整洁的解决方案,但至少可以让您预先指定DAG的运行次数(整数),而不是使用end_date

  • 或者(假设您实现了上述方法),而不是在每个DAG中嵌入此跳过max-runs功能,您可以创建一个单独的编排DAG,在其最大运行次数后禁用给定的DAG。


我看到唯一的问题是提供开始和结束日期不够清晰,我们只能估计作业运行时间并调整开始和结束日期。我正在寻找一个干净的解决方案,使DAG按顺序运行x次。我查看了您关于“调度程序”的链接,但它没有提到这是否是所有DAGS的全局设置,包括“run_duration”和“num_runs”。 - Nk.Pl

0

您需要设置属性depends_on_past。这是在DAG的默认参数部分设置的,它指的是先前实例的dag实例。这将解决您的问题。


通过在Airflow 1.10.1中设置属性,我观察到即使您在DAG的默认参数中设置它,它仍然在任务级别运行。例如:您通过在UI上手动触发多次来排队包含2个任务的DAG,您可以观察到DAG [1](第一个DAG运行的实例)在第一个任务完成成功后立即启动DAG [2]任务1,并且此行为随着前一个任务成功而继续进行。期望的行为是在DAG[2]开始之前,完全成功完成DAG[1]的任务。 - Nk.Pl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接