Airflow DAG 多次运行

Airflow DAG Multiple Runs

我有一个 DAG,我想在每次成功完成后多次 运行。例如,我想 运行 它 10 次然后停止。有没有办法做到这一点?我尝试使用 CRON 进行调度,但它看起来并不干净,也无法通过 UI 多次触发 DAG(运行s 并行)。

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

:param start_date: The timestamp from which the scheduler will attempt to backfill

:type start_date: datetime.datetime

:param end_date: A date beyond which your DAG won't run, leave to None for open ended scheduling

:type end_date: datetime.datetime


虽然无关,但也可以查看 airflow.cfg as mentioned in this 文章

中的以下 scheduler 设置
  • run_duration
  • num_runs

UPDATE-1

  • 在他的文章 Use apache airflow to run task exactly once 中,@Andreas P 描述了一种巧妙的技术,我相信它可以适应您的用例。虽然这不是一个非常整洁的解决方案,但它至少允许您预先指定 DAG 的运行次数(整数)而不是 end_date.

  • 或者(假设您实现了上述方法)而不是在每个 DAG 中烘焙这个 skipping-dag-after max-runs 功能,您可以创建一个单独的 orchestrator DAG 在最大运行次数过后禁用给定的 DAG。

您必须设置属性depends_on_past。这是在 DAG 的默认参数部分下设置的,它指的是以前的实例 dag 实例。这是解决你的问题。

我找到了我的用例的解决方案。它使用 depends_on_past=True(@Hitesh Gupta 提到的 )并设置您的 airflow.cfg 文件如下:

# The maximum number of active DAG runs per DAG max_active_runs_per_dag = 1

这使我们一次只能有一个活动的 DAG 运行,并且如果前一个 运行 失败,也不会继续下一个 DAG 运行。这是我测试过的 Airflow 版本 1.10.1。