【问题标题】:Why does Airflow changing start_date without renaming dag?为什么 Airflow 在不重命名 dag 的情况下更改 start_date?
【发布时间】:2019-11-27 11:59:36
【问题描述】:

我是一名数据工程师,经常使用气流。

使用新的开始日期重新部署 dag 时,最佳做法如 here 所示:

不要更改 start_date + 间隔:当 DAG 运行时,调度程序数据库包含该 DAG 运行的实例。如果您更改 start_date 或间隔并重新部署它,调度程序可能会因为间隔不同或 start_date 回来了而感到困惑。处理此问题的最佳方法是在更改 start_date 或间隔后立即更改 DAG 的版本,即 my_dag_v1 和 my_dag_v1。这样,旧版本的历史信息也会保留。

但是,在删除所有以前的 DAG 和任务运行后,我尝试重新部署具有新开始日期的 dag。它按预期工作了一天(使用新的开始日期),然后又开始使用旧的

这是什么原因?如果可以,请深入。

【问题讨论】:

  • Airflow 的 scheduler 是 complex and mysterious 工程。它有相当多的细微差别,并且已经提出了major changes。在此之前People recommend 定期重新启动它(这对于几乎每个长时间运行的进程都是如此)。至少更改 start_date 或 schedule_interval 需要立即重启(否则您会遇到一些意外)

标签: airflow airflow-scheduler


【解决方案1】:

Airflow 在dag_run 表中维护有关过去运行的所有信息。

当您清除之前的 dag 运行时,这些条目将从数据库中删除。因此,airflow 将此 dag 视为新的 dag,并在指定时间开始。

Airflow 检查最后一个 dag 执行时间(最后一次运行的start_date)并添加您在schedule_interval 中指定的timedelta 对象。

如果您在清除 dag 运行后仍遇到困难,您可以做的几件事:

  1. 按照建议重命名 dag。
  2. 清除所有 dag 运行,保持 dag 暂停。创建一个 dag 运行,然后打开 dag。之后它将在预定的时间运行。
  3. 最好的方法是在 schedule_interval 中使用 crontab 表达式。

【讨论】:

  • 我做了 3。SCHEDULE_INTERVAL = '0 4 * * *' 我故意试图避免 1。另外 2 也没有意义,因为我第一天就让它工作了,然后它就表现不正常。
猜你喜欢
  • 2018-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-26
相关资源
最近更新 更多