DAG (工作流程) 疑難排解

本頁面提供常見工作流程問題的疑難排解步驟和資訊。

排解工作流程問題

如何開始進行疑難排解:

  1. 查看 Airflow 記錄
  2. 查看 Stackdriver
  3. 在 GCP 主控台中,前往執行環境的 GCP 元件頁面查看是否有錯誤。
  4. Airflow 網頁介面中查看 DAG 的圖表檢視,檢查是否有失敗的工作執行個體。

    提示:如要瀏覽大型 DAG 以尋找失敗的工作執行個體,請覆寫網路伺服器的預設 dag_orientation 設定,將圖表檢視的方向從左到右改成右到左。

針對運算子錯誤進行偵錯

如何針對運算子錯誤進行偵錯:

  1. 檢查是否有與特定工作相關的錯誤
  2. 查看 Airflow 記錄
  3. 查看 Stackdriver
  4. 查看運算子專屬記錄。
  5. 修正錯誤。
  6. 將 DAG 上傳dags/ 資料夾。
  7. 在 Airflow 網頁介面中,清除 DAG 的狀態記錄
  8. 繼續或執行 DAG。

常見問題

以下各節說明一些常見工作流程問題的徵兆和可能修正方式。

工作失敗但未產生記錄

記錄會經過緩衝處理。如果工作站在緩衝區清除前停止運作,就不會產生記錄。如果工作失敗但未產生記錄,表示 Airflow 工作站因記憶體不足 (OOM) 而重新啟動。

DAG 的執行會受限於 RAM。每次執行工作時都會先進行兩個 Airflow 程序:執行和監控工作。目前每個節點最多可負荷 6 個並行工作 (約 12 個裝載 Airflow 模組的程序)。視 DAG 的大小而定,使用的記憶體可能會更多。

徵兆

  1. 在 GCP 主控台中,前往 GKE 工作負載面板。
  2. 如有顯示「Evicted」(已撤銷) 的「airflow-worker」pod,請按一下各個已撤銷的 pod,然後查看視窗頂端是否有顯示 The node was low on resource: memory 訊息。

修正問題

  1. 使用比目前機器類型更大的機器類型建立新的 Cloud Composer 環境。
  2. 確認 DAG 中的工作皆為冪等且可重試。
  3. 設定重試工作

DAG 負載匯入逾時

徵兆

  • Airflow 網頁 UI:DAG 清單頁面頂端有一個紅色快訊方塊顯示 Broken DAG: [/path/to/dagfile] Timeout
  • Stackdriver:airflow-scheduler 記錄包含如下的項目:
    • 「錯誤 - 程序逾時」
    • 「錯誤 - 無法匯入:/path/to/dagfile」
    • 「AirflowTaskTimeout:逾時」

修正問題

覆寫 core-dagbag_import_timeout 的 Airflow 設定,並給予系統更多時間進行 DAG 剖析。

DAG 導致 Airflow 網路伺服器當機或傳回 502 gateway timeout 錯誤

網路伺服器錯誤有幾個可能成因。如果執行的是 composer-1.5.2 以上版本,請在 Stackdriver Logging 中查看 airflow-webserver 記錄,針對 502 gateway timeout 錯誤進行偵錯。

需要大量資源的運算

請避免在剖析 DAG 時執行需要大量資源的運算。您可以自訂工作站和排程器節點的機器類型,以提高 CPU 和記憶體容量,但網路伺服器不同,其使用的是固定機器類型,如果剖析時進行的運算作業耗用過多資源,可能會導致 DAG 剖析錯誤。

請注意,網路伺服器有 2 個 vCPU 和 2 GB 的記憶體core-dagbag_import_timeout 的預設值為 30 秒。這個逾時值會定義 Airflow 在 dags/ 資料夾中載入 Python 模組的時間長度上限。

權限錯誤

執行網路伺服器與執行工作站和排程器的伺服器帳戶並不相同。因此,工作站和排程器或許能夠存取網路伺服器無法存取的使用者代管資源。

建議您避免在剖析 DAG 的期間存取非公開資源。有時您不得不存取非公開資源,在這種情況下,您必須為網路伺服器的服務帳戶授予相關權限。服務帳戶名稱衍生自網路伺服器網域。舉例來說,如果網域是 foo-tp.appspot.com,則服務帳戶為 foo-tp@appspot.gserviceaccount.com

DAG 錯誤

網路伺服器是在 App Engine 上執行,並與環境的 GKE 叢集隔開。網路伺服器會剖析 DAG 定義檔,且如果 DAG 中有錯誤,就可能會發生 502 gateway timeout。即使沒網路伺服器異常,Airflow 也仍可正常運作,前提是有問題的 DAG 未破壞 GKE 中執行的任何程序。在這個情況下,您可以透過 gcloud composer environments run 從環境擷取詳細資料,並在網路伺服器無法使用時以此做為解決方案。

在其他情況下,您可以在 GKE 中剖析 DAG,並留意是否有 DAG 擲回嚴重 Python 例外狀況或逾時 (超出預設的 30 秒)。如要進行疑難排解,請連線至 Airflow 工作站容器中的遠端殼層並進行測試,檢查是否有語法錯誤。詳情請參閱測試 DAG 一文。

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Cloud Composer