2016-12-14 33 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。

相關問題