2016-09-21 92 views
5

最近我已經測試氣流這麼多的運行airflow trigger_dag <my-dag>時有一個問題execution_dateairflow trigger_dag execution_date是第二天,爲什麼?

我已經瞭解到,execution_date是不是我們認爲在首次從here

氣流被開發作爲ETL需求的解決方案。在ETL世界中, 通常會彙總數據。所以,如果我想總結數據 2016年2月19日,我將在2016年2月20日午夜GMT,這將所有數據之後立即 爲2016年2月19日變爲可用做。

start_date = datetime.combine(datetime.today(), 
           datetime.min.time()) 

args = { 
    "owner": "xigua", 
    "start_date": start_date 
} 
dag = DAG(dag_id="hadoopprojects", default_args=args, 
      schedule_interval=timedelta(days=1)) 


wait_5m = ops.TimeDeltaSensor(task_id="wait_5m", 
           dag=dag, 
           delta=timedelta(minutes=5)) 

上面的代碼是我日常工作的一部分開始,第一項任務就是前實際工作等待5分鐘一個TimeDeltaSensor,所以這意味着我的DAG將在2016-09-09T00:05:002016-09-10T00:05:00觸發...等等。

在Web UI中,我可以看到像scheduled__2016-09-20T00:00:00之類的東西,並且任務在2016-09-21T00:00:00上運行,根據ETL模型,這似乎是合理的。

但是有一天我的dag沒有被觸發,原因不明,所以我手動觸發它,如果我在2016-09-20T00:10:00上觸發它,那麼TimeDeltaSensor將在運行前等到2016-09-21T00:15:00

這不是我想要的,我希望它不會在第二天運行在2016-09-20T00:15:00,我試過通過execution_date--conf '{"execution_date": "2016-09-20"}',但它不起作用。

我應該如何處理這個問題?

$ airflow version 
[2016-09-21 17:26:33,654] {__init__.py:36} INFO - Using executor LocalExecutor 
    ____________  _____________ 
____ |__()_________ __/__ /________  __ 
____ /| |_ /__ ___/_ /_ __ /_ __ \_ | /|// 
___ ___ |/_/ _ __/ _// /_/ /_ |/ |//
_/_/ |_/_/ /_/ /_/ /_/ \____/____/|__/ 
    v1.7.1.3 

回答

10

首先,我建議你使用常量start_date,因爲動態的將採取行動不可預測基於與您的氣流管道由調度評估。

更多有關start_date在這裏,我寫和整理這一切了一個FAQ條目: http://pythonhosted.org/airflow/faq.html#what-s-the-deal-with-start-date

現在,關於execution_date它被觸發時,這是人們在入職一氣流共同疑難雜症。氣流根據所涵蓋的時間表週期的左邊界設置execution_date,而不是基於何時發生(這將是該期間的正確界限)。例如,運行schedule='@hourly'任務時,任務將每隔一小時觸發一次。在下午2點發生的任務將有一個下午1點的execution_date,因爲它假定您在下午2點處理下午1點到下午2點的時間窗口。同樣,如果您運行的日常工作中,運行與2016-01-01execution_date將在午夜後不久觸發2016-01-02

此左側裝訂的標籤上印有一個很大的意義在ETL和差分負載來思考時,但在一個簡單的,類似cron調度的角度思考時變得混亂。

+0

我不認爲這是'start_date'問題,我haved圓潤我'start_date'到一天的午夜,我的問題是,'execute_date '當dag被外部觸發時被設置到第二天,對此我認爲這是不合理的,就像我上面所說的那樣。 –

+0

我明白要安排的ETL風格,但我該如何解決我的問題:由於不明原因,我的DAG沒有觸發,我可以在'execution_date'觸發它,除了'trigger_dag'子命令,我可以想'回填',那麼如果是這種情況,我們爲什麼還需要'trigger_dag',這是無稽之談? –

+0

您是否有計劃程序正在運行? '氣流調度器' – mistercrunch

1

氣流將提供UTC時間。我不確定你在什麼時區運行任務。因此,請確保您考慮UTC時區並相應地安排或觸發作業。

嘗試將您想要觸發的時間轉換爲UTC時間並觸發DAG。有用。欲瞭解更多信息,可以閱讀以下鏈接

https://cwiki.apache.org/confluence/display/AIRFLOW/Common+Pitfalls