2016-12-14 34 views
3

我读过Airflow的关于"What's the deal with start_date?"的常见问题,但它仍然不清楚为什么建议不要使用动态start_date为什么建议不要在Airflow中使用动态start_date?

据我了解,一个DAG的execution_date由所有的DAG的任务之间的最小start_date确定,以及随后的DAG奔跑在最新execution_date + schedule_interval跑。

如果我将DAG的default_argsstart_date是,比如说,昨天定为20:00:00,与天为1 schedule_interval,怎么会那个破或混淆的调度,如果在所有?如果我理解正确,调度程序将触发DAG,其日期为execution_date,日期为20:00:00,下一个DAG运行将安排在今天的20:00:00

有一些我失踪的概念吗?

回答

2

首次运行将在start_date+schedule_interval。它不会在start_date上运行Dag,它总是在start_date+schedule_interval上运行。

正如他们在文件中提到的,如果您给start_date动态的例如, datetime.now()并给予一定schedule_interval(1小时),它永远不会执行该运行作为移动now()随时间和datetime.now()+ 1 hour是不可能

+0

那么调度程序计算'start_date'的频率如何?它是否在每次运行之前计算它? – earthican

+0

我想我对此感到困惑:如果'start_date'在't'时间是'datetime.now()',那么't'应该已经保存在某个地方,对吧?所以当't + 1'终于到来时,调度程序应该知道开始运行,因为它不会再次计算'start_date' – earthican

+1

@earthican这在文档中没有明确提及。还有一件事我想提一下,如果你在start_date或schedule_interval中做了任何修改,总是修改dag的名字,比如my_dag_v1或者其他东西。如果您不更改dag的名称,则对start_date或interval的更改将不起作用 – liferacer

0

调度希望看到一个恒定的开始日期和时间间隔。如果更改它,调度程序可能不会注意到它重新加载DagBag,并且如果新的开始日期与您的旧时间表不一致,则可能会破坏depends_on_past行为。

如果不需要depends_on_past,最简单的方法是停止使用调度程序,将开始日期设置为某个任意的旧日期,然后使用crontab或类似方法从外部触发DAG。

相关问题