【问题标题】:Airflow schedule_interval and start_date to get it to always fire the next interval气流 schedule_interval 和 start_date 让它总是触发下一个间隔
【发布时间】:2021-05-23 00:52:02
【问题描述】:

关于部署 dag 的时间,我如何配置气流 (mwaa) 以使其每天在同一时间(太平洋标准时间早上 6 点)触发?

我已经尝试了对我有意义的方法:

  1. 将 schedule_interval 设置为 0 6 * * *
  2. 将开始日期设置为:
now = datetime.utcnow()
now = now.replace(tzinfo=pendulum.timezone('America/Los_Angeles'))
previous_five_am = now.replace(hour = 5, minute = 0, second = 0, microsecond = 0)
start_date = previous_five_am

似乎每当我通过将 start_date 设置为前一天早上 5 点进行部署时,无论我什么时间部署 dag 或进行气流更新,它总是会在下一个早上 6 点触发

【问题讨论】:

标签: cron airflow mwaa


【解决方案1】:

您的困惑可能是因为您希望 Airflow 会安排像 cronjob 这样的 DAG,而实际上并非如此。 第一个 DAG 运行是根据 DAG 中任务的最低 start_date 创建的。后续 DAG 运行由调度程序进程根据您的 DAG 的schedule_interval 按顺序创建。间隔END处的气流调度任务(参见docs),您可以查看此answer 示例。

至于您的示例代码 - 永远不要将您的 start_date 设置为动态的。这是一种不好的做法,有时会导致 DAG 永远不会被执行,因为 now() 总是移动到 now() + interval 可能永远无法到达,请参阅 Airflow FAQ

【讨论】:

  • 在我的情况下,开始日期是昨天凌晨 5 点,因此加上一个间隔(24 小时)将使下一个执行日期 = 早上 6 点的 tmrw,为什么不是这样?此外,如果我设置了一个静态开始日期,它最终会在过去很远,然后气流将为之间的所有间隔创建任务和执行日期,这会导致许多故障(噪音)。即使我设置了 catchup=False,为了防止回填创建太多的间隔。如何配置这两个值,以确保只安排接下来几天的时间间隔?
猜你喜欢
  • 2021-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多