【问题标题】:Why does airflow skips a day for a daily dag?为什么气流会跳过一天一天?
【发布时间】:2021-02-23 23:56:42
【问题描述】:

我有一个新创建的每日 dag,我昨天(1 月 25 日)设置了它,一旦它被气流加载,我可以看到它运行一次(scheduled_2021-0124T00:00:00+00:00),然后我手动触发了一次,看看它是否有效(manual_2021-01-25)。

现在时间是 1 月 26 日 08:24 UTC。但我没有看到 01-25 的任何运行。我使用了airflow dags next-execution,发现气流计划直接在 01-26 执行 dag,可能在 01-27 00:00 UTC。所以它会完全跳过 01-25。

我想知道为什么会出现这种行为?这背后有什么原因吗?

【问题讨论】:

标签: airflow


【解决方案1】:

这是 Airflow 中最难掌握的概念。在你得到这个之后,系统的其余部分就相当简单了。但是这个设计规范是残酷的,我看到它让经验丰富的工程师跪倒在地,愤怒地抽泣。

正如 Airflow 文档中提到的另一张海报,Airflow 会在期末运行您的工作。对于我来说,对于具有每日计划的 DAG,这是最容易可视化的。 DAG 运行日期为 01/01/2021,开始时间为 00:01 AM,直到 01/02/2021 00:01 AM 才会执行。

其中令人困惑的部分是为什么!?当您停下来思考为什么要编写 Airflow 时,它开始变得有意义。此执行模式可确保运行日期为 01/01/2021 的数据是完整的,并且在您的编排管道运行以对该数据执行操作时准备就绪。将其视为一个业务流程。如果您是一名业务分析师并于 2021 年 1 月 2 日开始工作,您将查看前一天的数据,而不是今天的数据。今天的数据还没有收集到。

同样的模式也适用于每周或每月间隔。该周或月的数据要等到该周期结束时才能准备好采取行动。

当您开始使用宏和 jinja 模板时,这也更有意义。

希望现在这一切都像泥浆一样清晰。

【讨论】:

  • 顺便说一句,Github 存在一个问题,可以选择更改此功能,使其在周期开始时运行 (01/01/2021)。希望他们能在今年推出。
  • @Gabe 很有趣。似乎这会使这更加混乱。目前与 jinja 插入和宏一起使用的方式很棒,只是当您第一次遇到它时并不完全直观。
  • 看来我在这里弄错了。误解了 OP 遇到的问题。无视答案。
【解决方案2】:

这实际上是 Airflow 2.0.0 版本中的一个错误,已在 2.0.1 中修复:https://github.com/apache/airflow/issues/13434

【讨论】:

    【解决方案3】:

    这是 Airflow 的一个功能,一开始也让我感到困惑。来自Airflow docs

    如果您在一天的 schedule_interval 上运行 DAG,则 execution_date 为 2019-11-21 的运行将在 2019-11-21T23:59 之后不久触发。

    让我们重复一遍,调度程序在开始日期之后一个 schedule_interval 的时间段结束时运行您的作业。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-30
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 2018-09-17
      • 1970-01-01
      相关资源
      最近更新 更多