2017-08-24 80 views
10

我正在使用Airflow v1.8.1並在kubernetes上運行所有組件(worker,web,flower,scheduler)& Docker。 我用芹菜執行人與Redis的,我的任務是看起來像:氣流任務陷入「排隊」狀態,永遠不會運行

(start) -> (do_work_for_product1) 
    ├ -> (do_work_for_product2) 
    ├ -> (do_work_for_product3) 
    ├ … 

所以start任務有多個下行流。 我設置併發相關的配置如下:

parallelism = 3 
dag_concurrency = 3 
max_active_runs = 1 

後來,當我手動運行該DAG(不知道它永遠不會在計劃任務發生),一些下行流得到執行,但其他人停留在「排隊」狀態。

如果我從Admin UI清除任務,它將被執行。 沒有工人日誌(在處理了一些第一個下游後,它只是不輸出任何日誌)。

Web服務器的日誌(不知道worker exiting有關)

/usr/local/lib/python2.7/dist-packages/flask/exthook.py:71: ExtDeprecationWarning: Importing flask.ext.cache is deprecated, use flask_cache instead. 
    .format(x=modname), ExtDeprecationWarning 
[2017-08-24 04:20:56,496] [51] {models.py:168} INFO - Filling up the DagBag from /usr/local/airflow_dags 
[2017-08-24 04:20:57 +0000] [27] [INFO] Handling signal: ttou 
[2017-08-24 04:20:57 +0000] [37] [INFO] Worker exiting (pid: 37) 

上有沒有調度錯誤日誌,太。每當我嘗試這些時,一些任務會停滯不前。

因爲我也使用Docker我想知道這是否相關: https://github.com/puckel/docker-airflow/issues/94 但到目前爲止,沒有線索。

有沒有人遇到類似的問題或有一些想法我可以調查這個問題......?

+0

嗨@Norio,我們遇到類似的問題,即'隊列中的任務,但調度程序似乎忘記了其中的一些。當我再次使用'氣流調度程序'時,它們已被拾取。我也使用1.8.1,kubernetes和Docker,但是與LocalExecutor一樣,這裏也是同樣的問題。 – Chengzhi

+0

@程智感謝您的信息。我利用這個shell https://github.com/apache/incubator-airflow/blob/ff45d8f2218a8da9328161aa66d004c3db3b367e/airflow/bin/airflow_scheduler_autorestart。sh自動重新啓動調度程序而不依賴於k8s的退出,所以在我的情況下,調度程序應該定期重新生成,但不會永遠選擇一些任務......非常奇怪。 –

+0

超級,感謝分享,非常有線,如果我發現了某些東西,我會保持循環,但看起來這是現在的解決方案。 – Chengzhi

回答

3

卡住的任務很可能是一個錯誤。目前(< = 1.9.0alpha1)它可能發生在任務甚至無法在(遠程)工作人員上啓動時發生。例如,在工作負載過重或缺少依賴關係的情況下會發生這種情況。

這個patch應該可以解決這個問題。

值得研究爲什麼你的任務沒有達到RUNNING狀態。將自己設置爲這個狀態是任務所做的第一件事。通常情況下,工作人員會在開始執行之前進行日誌記錄,並且還會報告錯誤。您應該能夠在任務日誌中找到此條目。

編輯:正如在原始問題的評論中提到的情況下,一個氣流不能運行任務的例子是當它不能寫入所需的位置。這使得它無法繼續,任務會卡住。該補丁通過使調度程序中的任務失敗來修復此問題。

+0

我們看到此問題,1.9.0任務已排隊,但從未運行除非通過UI手動完成 – l0n3r4ng3r

2

我們有一個解決方案,並希望在1.9成爲官方前分享。感謝Bolke de Bruin在1.9上的更新。在我1.9之前的情況下,目前我們使用的1.8.1是讓另一個DAG運行來清除queue state中的任務,如果它在此停留超過30分鐘。