疑難排解:DAG、操作員、連線和 Apache 氣流 v1 中的其他問題 - Amazon Managed Workflows for Apache Airflow

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

疑難排解:DAG、操作員、連線和 Apache 氣流 v1 中的其他問題

本頁的主題包含 Apache 氣流 v1.10.12 Python 相依性、自訂外掛程式、DAG、操作員、連線、任務和 Web 伺服器問題的解決方案,您可能會在 Apache 氣流環境的 Amazon 受管工作流程中遇到的問題。

更新 requirements.txt 文件

下列主題說明您在更新requirements.txt.

新增apache-airflow-providers-amazon會導致我的環境失敗

apache-airflow-providers-xyz僅與阿帕奇氣流 v2 兼容。 apache-airflow-backport-providers-xyz與阿帕奇氣流 1.10.12 兼容。

破碎的天

下列主題說明您在執行 DAG 時可能收到的錯誤。

我在使用 Amazon DynamoDB 運算子時收到「損壞的 DAG」錯誤訊息

建議下列步驟:

  1. 使用 aws-mwaa-local-runneron 在本機測試您的 DAG、自訂外掛程式和 Python 相依性GitHub。

  2. 將以下軟件包添加到您的requirements.txt.

    boto
  3. 探索在文件中指定 Python 依賴關係的方requirements.txt法,請參閱在 requirements.txt 中 Python 理依賴關係

我收到 '損壞的 DAG:沒有名為 psycopg2 的模塊' 錯誤

建議下列步驟:

  1. 使用 aws-mwaa-local-runneron 在本機測試您的 DAG、自訂外掛程式和 Python 相依性GitHub。

  2. 將以下內容添加到您requirements.txt的 Apache 氣流版本中。例如:

    apache-airflow[postgres]==1.10.12
  3. 探索在文件中指定 Python 依賴關係的方requirements.txt法,請參閱在 requirements.txt 中 Python 理依賴關係

我在使用 Slack 運算子時收到「破碎的 DAG」錯誤訊息

建議下列步驟:

  1. 使用 aws-mwaa-local-runneron 在本機測試您的 DAG、自訂外掛程式和 Python 相依性GitHub。

  2. 將下列套件新增至您的,requirements.txt並指定您的 Apache 氣流版本。例如:

    apache-airflow[slack]==1.10.12
  3. 探索在文件中指定 Python 依賴關係的方requirements.txt法,請參閱在 requirements.txt 中 Python 理依賴關係

我收到了安裝谷歌/GCP/ 的各種錯誤BigQuery

亞馬遜 MWAA 使用亞馬遜 Linux,它需要特定版本的 Cython 和加密庫。建議下列步驟:

  1. 使用 aws-mwaa-local-runneron 在本機測試您的 DAG、自訂外掛程式和 Python 相依性GitHub。

  2. 將以下軟件包添加到您的requirements.txt.

    grpcio==1.27.2 cython==0.29.21 pandas-gbq==0.13.3 cryptography==3.3.2 apache-airflow-backport-providers-amazon[google]
  3. 如果您不使用反向移植提供程序,則可以使用:

    grpcio==1.27.2 cython==0.29.21 pandas-gbq==0.13.3 cryptography==3.3.2 apache-airflow[gcp]==1.10.12
  4. 探索在文件中指定 Python 依賴關係的方requirements.txt法,請參閱在 requirements.txt 中 Python 理依賴關係

我收到「損壞的 DAG:沒有名為 Cython on 的模塊」錯誤

亞馬遜 MWAA 使用亞馬遜 Linux,這需要特定版本的 Cython。建議下列步驟:

  1. 使用 aws-mwaa-local-runneron 在本機測試您的 DAG、自訂外掛程式和 Python 相依性GitHub。

  2. 將以下軟件包添加到您的requirements.txt.

    cython==0.29.21
  3. Cython 庫有各種所需的 pip 依賴版本。例如,使用awswrangler==2.4.0需要pyarrow<3.1.0,>=2.0.0,因此 pip3 嘗試安裝pyarrow==3.0.0,導致 DAG 損壞錯誤。我們建議明確指定最舊的可接受版本。例如,如果您pyarrow==2.0.0在之前指定了最小值,awswrangler==2.4.0則錯誤消失,並且requirements.txt安裝正確。最終要求應如下所示:

    cython==0.29.21 pyarrow==2.0.0 awswrangler==2.4.0
  4. 探索在文件中指定 Python 依賴關係的方requirements.txt法,請參閱在 requirements.txt 中 Python 理依賴關係

電信業者

下列主題說明使用運算子時可能收到的錯誤。

我使用BigQuery運算子收到錯誤訊息

亞馬遜 MWAA 不支援具有 UI 擴充功能的運算子。建議下列步驟:

  1. 使用 aws-mwaa-local-runneron 在本機測試您的 DAG、自訂外掛程式和 Python 相依性GitHub。

  2. 因應措施是在匯入問題運算子<operator name>.operator_extra_links = None之後,在 DAG 中新增要設定的行來覆寫延伸模組。例如:

    from airflow.contrib.operators.bigquery_operator import BigQueryOperator BigQueryOperator.operator_extra_links = None
  3. 您可以通過將上述內容添加到插件中來為所有 DAG 使用此方法。如需範例,請參閱 為 Apache 氣流創建一個自定義插件 PythonVirtualenvOperator

連線

下列主題說明您在使用 Apache Airflow 連線或使用其他AWS資料庫時可能收到的錯誤。

我無法連線至雪花

建議下列步驟:

  1. 使用 aws-mwaa-local-runneron 在本機測試您的 DAG、自訂外掛程式和 Python 相依性GitHub。

  2. 將下列項目新增至您環境的 requirements.txt。

    asn1crypto == 0.24.0 snowflake-connector-python == 1.7.2
  3. 將下列匯入新增至您的 DAG:

    from airflow.contrib.hooks.snowflake_hook import SnowflakeHook from airflow.contrib.operators.snowflake_operator import SnowflakeOperator

確定 Apache Airflow 連線物件包含下列索引鍵/值組:

  1. 康涅狄格 ID:雪花 _ 連接器

  2. 連接器類型:雪花

  3. 主持人:<my account>. <my region if not us-west-2>. 雪花計算 .com

  4. 綱要:<my schema>

  5. 登入:<my user name>

  6. 密碼:

  7. 連接埠:<port, if any>

  8. 額外:

    { "account": "<my account>", "warehouse": "<my warehouse>", "database": "<my database>", "region": "<my region if not using us-west-2 otherwise omit this line>" }

例如:

>>> import json >>> from airflow.models.connection import Connection >>> myconn = Connection( ... conn_id='snowflake_conn', ... conn_type='Snowflake', ... host='YOUR_ACCOUNT.YOUR_REGION.snowflakecomputing.com', ... schema='YOUR_SCHEMA' ... login='YOUR_USERNAME', ... password='YOUR_PASSWORD', ... port='YOUR_PORT' ... extra=json.dumps(dict(account='YOUR_ACCOUNT', warehouse='YOUR_WAREHOUSE', database='YOUR_DB_OPTION', region='YOUR_REGION')), ... )

我無法連線至 Secrets Manager 式

建議下列步驟:

  1. 瞭解如何在中為 Apache 氣流連線和變數建立密鑰使用 AWS Secrets Manager 密碼設定 Apache 氣流連線

  2. 瞭解如何在中針對 Apache 氣流變數 (test-variable) 使用密鑰AWS Secrets Manager 對於 Apache 氣流變量使用秘密密鑰

  3. 在中了解如何使用密鑰進行 Apache 氣流連接 (myconn)使用秘密密鑰進 AWS Secrets Manager 行 Apache 氣流連接

我無法在 '<DB-identifier-name>.cluster-id 上連接到我的 MySQL 服務器。 <region>.rds. 亞馬遜. COM」

Amazon MWAA 的安全群組和 RDS 安全群組需要輸入規則,才能允許彼此往來的流量。建議下列步驟:

  1. 修改 RDS 安全群組,以允許來自 Amazon MWAA 虛擬私人雲端安全群組的所有流量。

  2. 修改 Amazon MWAA 的虛擬私人雲端安全群組,以允許來自 RDS 安全群組的所有流量。

  3. 再次重新執行您的工作,並檢查記錄中CloudWatch的 Apache 氣流記錄,以確認 SQL 查詢是否成功。

Web 伺服器

下列主題說明您在 Amazon MWAA 上針對 Apache 氣流網頁伺服器可能收到的錯誤。

我正在使用BigQueryOperator它導致我的 Web 服務器崩潰

建議下列步驟:

  1. Apache 氣流操作員 (例如BigQueryOperator和包QuboleOperator含)operator_extra_links 可能會導致 Apache 氣流網頁伺服器當機。這些操作員嘗試將代碼加載到您的 Web 服務器,出於安全原因,這是不允許的。建議您在匯入陳述式之後新增下列程式碼,以修補 DAG 中的運算子:

    BigQueryOperator.operator_extra_links = None
  2. 使用 aws-mwaa-local-runneron 在本機測試您的 DAG、自訂外掛程式和 Python 相依性GitHub。

我看到存取網頁伺服器時發生 5xx 錯誤

建議下列步驟:

  1. 檢查 Apache Airflow 組態選項。確認您指定為 Apache 氣流組態選項的索引鍵值配對 (例如AWS Secrets Manager) 已正確設定。如需進一步了解,請參閱 我無法連線至 Secrets Manager 式

  2. 檢查requirements.txt。確認您的氣流「額外」套件和其他程式庫與requirements.txt您的 Apache 氣流版本相容。

  3. 探索在文件中指定 Python 依賴關係的方requirements.txt法,請參閱在 requirements.txt 中 Python 理依賴關係

我看到「調度程序似乎沒有運行」錯誤

如果排程器似乎沒有在執行中,或數小時前收到最後一個「心跳」,您的 DAG 可能不會出現在 Apache Airflow 中,而且不會排定新工作。

建議下列步驟:

  1. 確認您的 VPC 安全群組允許對連接埠進行輸入存取5432。需要此連接埠才能連接到您環境的 Amazon Aurora PostgreSQL 中繼資料資料庫。添加此規則後,請給 Amazon MWAA 幾分鐘,錯誤應該消失。如需進一步了解,請參閱 Amazon MWAA 上 VPC 中的安全性

    注意
    • Aurora PostgreSQL 中繼資料庫是亞馬遜 MWAA 服務架構的一部分,在您的AWS 帳戶.

    • 資料庫相關錯誤通常是排程器失敗的徵兆,而不是根本原因。

  2. 如果排程器未執行,可能是由於許多因素,例如相依性安裝失敗排程器過載。在記錄檔中檢視對應的CloudWatch記錄群組,確認您的 DAG、外掛程式和需求是否正常運作。如需進一步了解,請參閱 針對 Apache 氣流的 Amazon 受管工作流程監控和指標

任務

下列主題說明您在環境中針對 Apache Airflow 工作可能收到的錯誤。

我看到我的任務卡住或未完成

如果您的 Apache 氣流任務「卡住」或未完成,我們建議您執行以下步驟:

  1. 可能有大量的定義 DAG。減少 DAG 的數目,並執行環境的更新 (例如變更記錄層級) 以強制重設。

    1. 氣流會剖析 DAG 是否已啟用。如果您使用的環境容量超過 50%,您可能會開始壓倒 Apache 氣流排程器。這會導致CloudWatch量度中的「總剖析時間」較長,或是CloudWatch記錄檔中的 DAG 處理時間過長。還有其他方法可將 Apache Airflow 組態最佳化,不在本指南的討論範圍內。

    2. 若要深入瞭解我們建議調整環境效能的最佳做法,請參閱Amazon 上 Apache 氣流的性能調整 MWAA

  2. 佇列中可能有大量工作。這通常會顯示為處於「無」狀態的大量工作 (而且正在增加),或在中排入佇列的工作和/或擱置中的工作中顯示為大量工作CloudWatch。這種情況可能是由於下列原因而發生:

    1. 如果要執行的工作數量超過環境所能執行的容量,和/或在自動調度資源有時間偵測工作並部署其他 Worker 之前排入佇列的大量工作。

    2. 如果要執行的工作數量超過具有執行容量的環境,建議您減少 DAG 同時執行的工作數量,和/或增加 Apache Airflow Worker 的最小值。

    3. 如果在自動調度資源有時間偵測和部署其他工作者之前,有大量工作已排入佇列,建議您進行人的工作部署和/或增加 Apache Airflow Worker 的最小值。

    4. 您可以使用AWS Command Line Interface (AWS CLI) 中的更新環境命令來變更在您環境中執行的 Worker 數目下限或上限。

      aws mwaa update-environment --name MyEnvironmentName --min-workers 2 --max-workers 10
    5. 若要深入瞭解我們建議調整環境效能的最佳做法,請參閱Amazon 上 Apache 氣流的性能調整 MWAA

  3. 執行中可能會刪除某些工作,這些工作會顯示為工作記錄,而在 Apache Airflow 中沒有進一步指示的情況下停止。這種情況可能是由於下列原因而發生:

    1. 如果有一個短暫的時刻,其中 1)當前任務超過當前的環境容量,然後是 2)幾分鐘沒有任務執行或排隊,那麼 3)新的任務被排隊。

    2. Amazon MWAA 透過新增其他工作程式,自動調度資源回應第一個案例。在第二個案例中,它會移除其他 Worker。某些正在排入佇列的工作可能會導致 Worker 在移除程序中,而且會在刪除容器時結束。

    3. 我們建議您增加環境中的最少員工數量。另一個選項是調整 DAG 和工作的時間,以確保這些案例不會發生。

    4. 您還可以將最小工作人員設置為等於環境中最大工作人員,以有效地禁用自動調度資源。使用AWS Command Line Interface (AWS CLI) 中的更新環境命令,藉由將 Worker 的最小和最大數目設定為相同,以停用自動調度資源。

      aws mwaa update-environment --name MyEnvironmentName --min-workers 5 --max-workers 5
    5. 若要深入瞭解我們建議調整環境效能的最佳做法,請參閱Amazon 上 Apache 氣流的性能調整 MWAA

  4. 如果您的任務處於「正在運行」狀態,您也可以清除任務或將其標記為成功或失敗。這可讓您的環境自動調度資源元件縮減環境中執行的 Worker 數目。下圖顯示了擱淺工作的範例。

    這是一個擱淺任務的圖像。
    1. 選擇擱淺工作的圓形,然後選取 [清除] (如圖所示)。這可讓 Amazon MWAA 縮減工作者的規模;否則,Amazon MWAA 無法判斷哪些 DAG 已啟用或停用,如果仍有佇列的任務,也無法縮小規模。

      Apache 的氣流行動
  5. 若要深入瞭解 Apache 氣流工作生命週期,請參閱 Apache 氣流參考指南中的概念

CLI

下列主題說明您在中執行 Airflow CLI 命令時可能收到的錯誤AWS Command Line Interface。

我在 CLI 中觸發 DAG 時看到「503」錯誤

氣流 CLI 在 Apache 氣流網頁伺服器上執行,該伺服器的並行性有限。通常最多可同時執行 4 個 CLI 命令。