2016-08-03 88 views
25

假設你的氣流DAG沒有意義回填,這意味着在它運行一次之後,快速運行後續時間將毫無意義。如何防止回填充氣氣流?

例如,如果你從一些來源,僅每小時更新到數據庫,回填,發生在快速連續加載數據,也只是一次又一次地導入相同的數據。

當你實例化一個新的每小時任務時,這會特別惱人,並且它會在你指定的時間間隔開始運行之前運行N錯過的每個小時的時間量,完成冗餘工作。

我能想到的唯一的解決辦法是什麼,他們專門在FAQ of the docs

防止建議我們建議不要使用動態值作爲起始日期,尤其是datetime.now()因爲它可以相當混亂。

有什麼辦法可以禁用DAG的回填,或者我應該這樣做嗎?

回答

17

升級到氣流版本1.8和使用catchup_by_default =假在airflow.cfg或申請追趕= False以您的每一個的DAG。

https://github.com/apache/incubator-airflow/blob/master/UPDATING.md#catchup_by_default

+0

謝謝。這比LatestOnlyOperator更好。 – m0meni

+2

我已經設置了catchup_by_default = False,但Airflow仍然回填作業。任何想法爲什麼?我正在運行版本1.8 –

+0

@OllieGlass你確定你已經將它應用到了正確的容器中,我不知道你的設置是什麼,但這確實很重要。如果您不確定,您也可以嘗試將其應用於特定的DAG。 – sage88

10

這似乎是一個尚未解決的問題的氣流。我知道我真的很想擁有完全相同的功能。這是我所得到的;它可能對其他人有用。

的是UI特性(至少在1.7.1.3),它可以幫助解決這個問題。如果您轉到樹視圖並單擊特定任務(方框),對話框按鈕將出現「標記成功」按鈕。單擊「過去」,然後單擊「標記成功」將會將DAG中該任務的所有實例標記爲成功,並且不會運行。頂級DAG(頂部的圓圈)也可以用類似的方式標記爲成功,但似乎沒有辦法標記多個DAG實例。

我還沒看着它夠深了還,但有可能使用「trigger_dag」子標記的DAG的狀態。在這裏看到:https://github.com/apache/incubator-airflow/pull/644/commits/4d30d4d79f1a18b071b585500474248e5f46d67d

一個CLI功能可以標記DAG的是在作品: http://mail-archives.apache.org/mod_mbox/airflow-commits/201606.mbox/%[email protected]%3E https://github.com/apache/incubator-airflow/pull/1590

更新(2016年9月28日): 一個新的運營商LatestOnlyOperator「已添加(https://github.com/apache/incubator-airflow/pull/1752)的將只運行最新版本的下游任務。聽起來非常實用,希望這將使它成爲很快

更新2發行版:由於氣流1.8中,LatestOnlyOperator已被釋放。

+0

更新看起來很有前途!感謝您跟上這個問題。 – m0meni

+1

請注意,LatestOnlyOperator將下行任務設置爲「跳過」狀態。根據文檔,跳過的狀態會傳播,以至於所有直接上游任務也被跳過。這使得這種方法不適合,當你想讓上游作業成功地運行以及過時的數據時。在這種情況下,最好的解決方案是在代碼中添加一個早期的操作符,如果任務運行得特別晚,則該操作符可以逃脫成功。 – russellpierce

+1

cli的回填命令看起來像現在可用,並且可能是現在執行此操作的最佳方法。 https://airflow.incubator.apache.org/cli.html 氣流回填-h [hostname here] -m = True -s [startdate] -e $(date +「%Y-%m-%dT:% H:%M:%S「) – sage88