每月日期和时间的气流 DAG 调度

Posted

技术标签:

【中文标题】每月日期和时间的气流 DAG 调度【英文标题】:Airflow DAG Scheduling for day and time of month 【发布时间】:2017-05-29 14:30:49 【问题描述】:

我们一直在将 cron 作业转换为 Airflow DAG,但我很难弄清楚 DAG 的调度在 Airflow 中是如何工作的。一些 DAG 需要在一天中的特定时间(即早上 7 点)运行,而其他 DAG 需要在每月的特定日期/时间(即每月 15 日早上 6 点)运行。

一般来说,Airflow 似乎每天都在正确运行 DAG。所以,schedule_interval = '0 7 * * *'start_date': datetime(2017,4,7) 每天早上 7 点运行。

但是,对于每月 DAG(schedule_interval = '0 6 15 * *''start_date': datetime(2017,4,7)),它在 4 月 15 日早上 6 点运行,但从那时起就没有运行过。我尝试每月安排的其他 DAG 在第一个月后同样无法运行。

Airflow 关于调度的文档是,IMO,泥泞和对其他 SO 问题的回答让我更加困惑。我希望有人能澄清我的理解和我试图每月安排的 DAG 出了什么问题。

【问题讨论】:

您是否在 2017 年 5 月 16 日至 2017 年 6 月 14 日期间查看此 DAG,正如您的发布时间所暗示的那样?如果是这样,您将错过将 2017-04-15 的 execution_date(在 UI 中运行)标识为 DAG 运行的日期。请查看第一个任务的开始时间(在 UI 中开始),它实际上在 2017-05-15 运行 2017-04-15。这与您在下面得到的答案一致。 【参考方案1】:

Airflow 的月度运行计划虽然与其每日计划一致,但令人困惑。因此,每月 DAG 的运行时间比您预期的要晚大约一个月。例如,如果我安排 DAG 在每月的第一天午夜运行(例如 0 0 1 * *),则执行日期为 2018-04-01 的运行实际上将在 2018-05-01 午夜之后运行。这是因为 Airflow 在运行前会等待执行周期结束。我认为这个想法是2018-04-01的每月执行代表了2018-04-01到2018-05-01整个期间的数据。

您需要根据这个概念重新安排您的日程安排。

【讨论】:

以上是关于每月日期和时间的气流 DAG 调度的主要内容,如果未能解决你的问题,请参考以下文章

气流回填不起作用

是否可以同时进行气流回填和调度?

气流元数据库表 dag_run 中的列 end_date 为空

气流 - 如何获得所有未来的运行日期

气流:如何删除 DAG?

气流:任务调度间隔数秒,两次