气流执行日期令人困惑

Posted

技术标签:

【中文标题】气流执行日期令人困惑【英文标题】:Airflow Execution Date is Confusing 【发布时间】:2021-07-18 22:50:59 【问题描述】:

我正在研究 Airflow 文档以更好地了解其调度机制。我遇到了下面的例子。

在文档中指出,当调度程序在 2016-01-02 早上 6 点选择 DAG 时,将创建一个 DAG Run,execution_date 为 2016-01-01,下一个将是创建于 2016 年 1 月 3 日上午午夜刚过,执行日期为 2016 年 1 月 2 日。

调度间隔按小时提供,执行日期是指最后运行 DAG 的时间段的开始,所以为什么不是 2016 年 1 月 2 日早上 6 点在调度程序的前一小时选择 DAG?

"""
Code that goes along with the Airflow tutorial located at:
https://github.com/airbnb/airflow/blob/master/airflow/example_dags/tutorial.py
"""
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from datetime import datetime, timedelta


default_args = 
    'owner': 'airflow',
    'depends_on_past': False,
    'start_date': datetime(2015, 12, 1),
    'email': ['airflow@example.com'],
    'email_on_failure': False,
    'email_on_retry': False,
    'retries': 1,
    'retry_delay': timedelta(minutes=5),
    'schedule_interval': '@hourly',


dag = DAG('tutorial', catchup=False, default_args=default_args)

我创建了一个基本的 DAG,它的运行信息如下图所示。我给 schedule_interval 50 * * * *。当调度器选择 DAG 时钟时,大约是 10:58,所以它已经过了 10:50。 DAG 立即被触发,因为已经过了 10:50,所以它的执行日期是 2021-04-25 09:50。所以它的执行日期也是在它被触发的那一天,因为它被安排在每小时 50 分钟。

在气流中@hourly 对应于 0 * * * *。它的时间表也类似。它在每小时的第 0 分钟触发,但在文档中其执行日期为 2016-01-01。我想应该是 2016-01-02 5PM,因为它是每小时触发一次,而当它在 6PM 触发时,它的间隔开始日期是 2016-01-02 5PM。

【问题讨论】:

【参考方案1】:

Airflow 在间隔结束时运行 DAG。因此,当您以 24 小时间隔工作时,2016-01-01 的运行将从2016-01-02 开始。 这与数据管道创作是一致的。今天你正在处理昨天的数据。

您可以在以下答案中了解更多信息:

https://***.com/a/65196624/14624409

https://***.com/a/66288641/14624409

【讨论】:

谢谢,但 schedule_interval 设置为每小时。这让我感到困惑。我知道 DAGRuns 实际上在间隔结束时运行,所以我认为如果 Airflow 选择 dag 2016-01-02 6 AM,它必须运行 DAG 并将执行日期作为间隔的开始时间为 2016-01-02凌晨 5 点,因为计划间隔设置为每小时。 @tkarahan 逻辑是否相同并不重要。我想我可能不完全理解你的问题。我提供给另一个 *** 问题的链接给出了每小时 dag 的示例是否还不够清楚?您能否提供显示 DAG 运行详细信息的 UI 屏幕截图以及哪些内容与您的期望不符? 我检查了链接,我的理解是如果您将 dag 安排为 0 8 * * * 它将在第二天 08:00 触发,因为它是其间隔的结束。在我的情况下,@hourly 对应于 0 * * * *,因此不是每天安排一次,而是每小时安排一次。因此,它的间隔开始必须是从其触发时间开始的一小时前。如果它在 2016 年 1 月 2 日下午 6 点被调度程序选中并触发,那么它的执行日期必须是 2016 年 1 月 2 日下午 5 点,因为它是按小时安排的。我也测试了这个逻辑,它似乎与截图兼容。我想知道文档是否包含虚假信息。 @tkarahan 当您提供过去的start_date + catchup=False 时,您是否对第一次运行感到困惑?见***.com/a/67161656/14624409

以上是关于气流执行日期令人困惑的主要内容,如果未能解决你的问题,请参考以下文章

如何对 REST api 执行异步 axios 调用并更新存储(redux thunk 令人困惑)?

令人困惑的strtotime

git status 给了我一些令人困惑的 iOS 配置文件,我不知道如何处理 [重复]

@SessionAttribute 令人困惑

解释这个令人困惑的 dojo 教程语法声明

nsfetchedresultscontroller 实现令人困惑