Amazon 上 Apache Airflow 的效能調校 MWAA - Amazon Managed Workflows for Apache Airflow

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

Amazon 上 Apache Airflow 的效能調校 MWAA

本主題說明如何使用 調整 Amazon Managed Workflows for Apache Airflow 環境的效能在 Amazon MWAA 上使用 Apache Airflow 組態選項

新增 Apache Airflow 組態選項

下列程序會逐步引導您將 Airflow 組態選項新增至環境的步驟。

  1. 在 Amazon MWAA主控台上開啟環境頁面

  2. 選擇環境。

  3. 選擇編輯

  4. 選擇 Next (下一步)

  5. 在 Airflow 組態選項窗格中選擇新增自訂組態。

  6. 從下拉式清單中選擇組態並輸入值,或輸入自訂組態並輸入值。

  7. 針對您要新增的每個組態,選擇新增自訂組態。

  8. 選擇 Save (儲存)。

如需進一步了解,請參閱 在 Amazon MWAA 上使用 Apache Airflow 組態選項

Apache Airflow 排程器

Apache Airflow 排程器是 Apache Airflow 的核心元件。排程器的問題可以DAGs防止 剖析和任務排程。如需 Apache Airflow 排程器調校的詳細資訊,請參閱 Apache Airflow 文件網站中的微調排程器效能

參數

本節說明 Apache Airflow 排程器可用的組態選項及其使用案例。

Apache Airflow v2
版本 組態選項 預設 描述 使用案例

v2

celery.sync_parallelism

1

Celery Executor 用來同步任務狀態的程序數目。

您可以使用此選項來限制 Celery Executor 使用的程序,以防止佇列衝突。根據預設, 值會設為 1 ,以防止將任務日誌交付至 CloudWatch Logs 時發生錯誤。將 值設定為 0表示使用程序數目上限,但在交付任務日誌時可能會導致錯誤。

v2

scheduler.idle_sleep_time

1

排程器「迴圈」中連續處理DAG檔案之間的等待秒數。

您可以使用此選項,透過增加排程器在擷取DAG剖析結果、尋找和佇列任務,以及在執行中執行佇列任務後休眠的時間,來釋放排程器上的CPU用量。增加此值會耗用 scheduler.parsing_processes Apache Airflow v2 和 Apache Airflow v1 在 環境中執行scheduler.max_threads排程器執行緒數目。這可能會減少排程器剖析 的容量DAGs,並增加 Web 伺服器中DAGs出現 所需的時間。

v2

scheduler.max_dagruns_to_create_per_loop

10

每個排程器「迴圈」DAGs要DagRuns為 建立的最大數量。

您可以使用此選項,透過減少排程器「迴圈」DagRuns的 數目上限,釋放用於排程任務的資源。

v2

scheduler.parsing_processes

根據(2 * number of vCPUs) - 1預設,使用以下公式設定 :。

排程器可以平行執行的執行緒數目,以排程 DAGs。

您可以使用此選項,藉由減少排程器平行執行以剖析 的程序數目來釋放資源DAGs。如果DAG剖析會影響任務排程,建議您將此數字保持低。您必須指定小於您環境中 vCPU 計數的值。如需進一步了解,請參閱限制

限制

本節說明調整排程器的預設參數時應考慮的限制。

scheduler.parsing_processes、scheduler.max_threads

環境類別的每個 vCPU 允許兩個執行緒。環境類別的排程器必須至少保留一個執行緒。如果您注意到任務排程延遲,您可能需要增加環境類別。例如,大型環境的排程器具有 4 vCPU Fargate 容器執行個體。這表示,其他程序可使用的執行緒7總數上限為 。也就是說,兩個執行緒會乘以四個 vCPUs,減去排程器本身的一個 。您在 中指定的值scheduler.max_threadsscheduler.parsing_processes,不得超過環境類別可用的執行緒數量 (如下所示:

  • mw1.small – 不得超過其他程序的1執行緒。剩餘的執行緒會保留給排程器

  • mw1.medium – 不得超過其他程序的3執行緒。剩餘的執行緒會保留給排程器

  • mw1.large – 不得超過其他程序的7執行緒。剩餘的執行緒會保留給排程器

DAG 資料夾

Apache Airflow 排程器會持續掃描您環境中的DAGs資料夾。任何包含plugins.zip的檔案,或包含「airflow」匯入陳述式的 Python (.py) 檔案。然後,任何產生的 Python DAG 物件都會放入 DagBag ,以供排程器處理該檔案,以決定哪些任務需要排程。無論檔案是否包含任何可行DAG的物件,都會進行大型檔案剖析。

參數

本節說明DAGs資料夾及其使用案例可用的組態選項。

Apache Airflow v2
版本 組態選項 預設 描述 使用案例

v2

scheduler.dag_dir_list_interval

300 秒

應掃描DAGs資料夾是否有新檔案的秒數。

您可以使用此選項,透過增加剖析DAGs資料夾的秒數來釋放資源。如果您在 中看到較長的剖析時間total_parse_time metrics,建議您增加此值,這可能是因為您DAGs資料夾中有大量檔案所致。

v2

scheduler.min_file_process_interval

30 秒

排程器剖析 DAG 並DAG反映更新後的秒數。

您可以使用此選項,透過增加排程器在剖析 之前等待的秒數來釋放資源DAG。例如,如果您指定 的值30,則會每 30 秒剖析一次DAG檔案。我們建議您將此數字維持在高,以減少環境中的CPU用量。

DAG 檔案

做為 Apache Airflow 排程器迴圈的一部分,會剖析個別DAG檔案以擷取 DAG Python 物件。在 Apache Airflow v2 和更高版本中,排程器會同時剖析最多數量的剖析程序。在 中指定的秒數scheduler.min_file_process_interval必須通過,才能再次剖析相同的檔案。

參數

本節說明適用於 Apache Airflow DAG 檔案的組態選項及其使用案例。

Apache Airflow v2
版本 組態選項 預設 描述 使用案例

v2

core.dag_file_processor_timeout

50 秒

處理DAG檔案DagFileProcessor逾時之前的秒數。

您可以使用此選項,透過增加DagFileProcessor逾時前所需的時間來釋放資源。如果您在DAG處理日誌中看到導致沒有DAGs載入可行的逾時,建議您增加此值。

v2

core.dagbag_import_timeout

30 秒

匯入 Python 檔案逾時之前的秒數。

您可以使用此選項,透過增加在匯入 Python 檔案以擷取DAG物件時,排程器逾時之前所花費的時間來釋放資源。此選項會做為排程器「迴圈」的一部分處理,且必須包含低於 中指定值的值core.dag_file_processor_timeout

v2

core.min_serialized_dag_update_interval

30

更新DAGs資料庫中序列化的最小秒數。

您可以使用此選項,透過增加DAGs資料庫中序列化更新後的秒數來釋放資源。如果您有大量 DAGs、 或複雜 ,建議您增加此值DAGs。增加此值可減少排程器和資料庫的負載DAGs,如同序列化。

v2

core.min_serialized_dag_fetch_interval

10

當 已載入 時,從資料庫DAG重新擷取序列化的秒數 DagBag。

您可以使用此選項來增加DAG重新擷取序列化的秒數,以釋放資源。值必須高於 中指定的值,core.min_serialized_dag_update_interval才能降低資料庫「寫入」速率。增加此值可減少 Web 伺服器和資料庫的負載DAGs,如同序列化。

任務

Apache Airflow 排程器和工作者都參與佇列和取消佇列任務。排程器會將準備從狀態排程的剖析任務轉換為已排程狀態。執行器也會在 Fargate 的排程器容器上執行,將這些任務排入佇列,並將其狀態設定為已排入佇列。當工作者有容量時,會從佇列中取得任務,並將狀態設定為執行中,之後會根據任務是否成功,將其狀態變更為成功或失敗。

參數

本節說明適用於 Apache Airflow 任務的組態選項及其使用案例。

Amazon MWAA覆寫的預設組態選項會在 中標記red

Apache Airflow v2
版本 組態選項 預設 描述 使用案例

v2

core.parallelism

根據 動態設定(maxWorkers * maxCeleryWorkers) / schedulers * 1.5

狀態為「執行中」的任務執行個體數量上限。

您可以使用此選項來增加可同時執行的任務執行個體數量,以釋放資源。指定的值應該是可用工作者任務密度的「時間」數目。我們建議您只有在看到大量任務卡在「執行中」或「佇列」狀態時,才變更此值。

v2

core.dag_concurrency

10000

允許為每個 同時執行的任務執行個體數目DAG。

您可以使用此選項來增加允許同時執行的任務執行個體數量,以釋放資源。例如,如果您有 100 DAGs 個平行任務,且您希望所有任務同時DAGs執行,則可以計算最大平行處理為 中可用工作者任務密度的「時間」數目celery.worker_concurrency,除以 DAGs(例如 100)。

v2

core.execute_tasks_new_python_interpreter

True

決定 Apache Airflow 是否透過強制父程序執行任務,還是建立新的 Python 程序。

設定為 時True,Apache Airflow 會將您對外掛程式所做的變更識別為新的 Python 程序,以便建立以執行任務。

v2

celery.worker_concurrency

N/A

Amazon 會MWAA覆寫此選項的 Airflow 基本安裝,以擴展工作者,做為其自動擴展元件的一部分。

Any value specified for this option is ignored.

v2

celery.worker_autoscale

mw1.micro - 3,0

mw1.small - 5,0

mw1.medium - 10,0

mw1.large - 20,0

mw1.xlarge - 40,0

mw1.2xlarge - 80,0

工作者的任務並行。

您可以使用此選項,透過減少工作者的任務minimum並行maximum,來釋放資源。工作者最多接受設定的maximum並行任務,無論是否有足夠資源可以這樣做。如果任務排程時沒有足夠的資源,任務會立即失敗。我們建議將此值變更為資源密集型任務,方法是將值減少為小於預設值,以允許每個任務擁有更多容量。