【发布时间】: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。
【问题讨论】: