首页 > 解决方案 > Airflow 为什么调度程序不启动我的 DAG?

问题描述

我有以下达格: 在此处输入图像描述

第一个 Dag0 1 * * *运行没有任何问题。最终 DAG0 10 1 * * 没有运行。当我做:

import datetime
print datetime.datetime.now()

我得到:

2018-07-01 12:14:15.632812

所以我不明白为什么没有安排这个 DAG。我知道在 10:00 准确运行不是强制性的,但 stat 应该是Running.

根据第一个任务的“最新运行”,2018-06-30 01:00我怀疑我实际上并不了解气流时钟。从我的角度来看,最后一次运行是2018-07-01 01:00因为它是今天早上而不是昨天运行的。

编辑: 我在文档中看到了这一段

“请注意,如果您在一天的 schedule_interval 上运行 DAG,则标记为 2016-01-01 的运行将在 2016-01-01T23:59 之后不久触发。换句话说,作业实例在其涵盖的时间段内启动结束了。”

所以我想知道..我应该把所有事情都安排在我想要的实际日期前一天吗?所以如果我真的想要运行一些东西,0 10 1 * *我应该把它安排到 0 10 30 * *? 换句话说,如果我想在每个月的 1 日 10:00 运行某些东西,我应该将它安排到每个月的最后一天 10:00 吗?

这其中的逻辑在哪里?这很难理解和遵循。

它变得最糟糕,根据这个没有办法告诉调度程序这个输入。我是什么做的?!

标签: airflow

解决方案


Airflow 安排任务在计划间隔结束时运行。这可能有点违反直觉,但基于特定间隔的数据在该间隔结束之前不可用的想法。

假设您有一个应该每天运行的工作流。直到那天结束(今天),您才能获得昨天的所有数据。

在您的情况下,第一个 DAG 的最后一次运行是在昨天是有意义的,因为那是与该 DagRun 相关联的“execution_date” - 您的 DAG 今天针对昨天的数据运行。

如果您希望您的 DAG 在每个月的 1 日运行,那么更改时间表并不是一个坏主意。但是,如果您希望 DAG 为每个月 1 日关联的数据运行(即将该日期传递给 API 请求或 SQL 查询),那么您做对了。


推荐阅读