airflow - 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 安排任务在计划间隔结束时运行。这可能有点违反直觉,但基于特定间隔的数据在该间隔结束之前不可用的想法。
假设您有一个应该每天运行的工作流。直到那天结束(今天),您才能获得昨天的所有数据。
在您的情况下,第一个 DAG 的最后一次运行是在昨天是有意义的,因为那是与该 DagRun 相关联的“execution_date” - 您的 DAG 今天针对昨天的数据运行。
如果您希望您的 DAG 在每个月的 1 日运行,那么更改时间表并不是一个坏主意。但是,如果您希望 DAG 为每个月 1 日关联的数据运行(即将该日期传递给 API 请求或 SQL 查询),那么您做对了。
推荐阅读
- python - python脚本在后台运行时网站上的Flask Progressbar
- ios - 在swift 5中从UIImage中删除白色背景
- python - 如何使用 cx_oracle 从 blob 列数据中检索数据?
- django - Django AbstractUser 密码没有散列
- android - Android - 从 json 结果打开 URL
- node.js - 无限人口猫鼬节点js
- c++ - 用 C++ 将 OpenCV 帧写入磁盘:单线程写入速度是否受磁盘吞吐量以外的任何限制?
- aws-cli - AWS CLI 根据标签过滤图像
- java - 如何使用 Maven 对任何存储库中不可用的非 Java 依赖项进行建模?
- c# - 将查询和标头参数绑定到同一个模型