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

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

Amazon MWAA 上 Apache Airflow 的效能調校

本主題說明如何使用 調整 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 檔案處理之間的等待秒數。

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

v2

scheduler.max_dagruns_to_create_per_loop

10

為每個排程器「迴圈」建立 DagRuns 的 DAGs 數目上限。

您可以使用此選項,透過減少排程器「迴圈」的 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,則 DAG 檔案會在每 30 秒剖析一次。我們建議您將此數字保持在高,以減少您環境中的 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 秒

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

您可以使用此選項,透過增加 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

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

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

任務

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

參數

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

Amazon MWAA 覆寫的預設組態選項會以紅色標示。

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

v2

core.parallelism

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

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

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

v2

core.dag_concurrency

10000

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

您可以使用此選項來增加允許同時執行的任務執行個體數量,以釋放資源。例如,如果您有 100 個具有 10 個平行任務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 基本安裝,以擴展工作者,做為其自動擴展元件的一部分。

此選項指定的任何值都會遭到忽略。

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並行任務,無論是否有足夠資源可以這樣做。如果任務排程時資源不足,任務會立即失敗。我們建議將此值變更為資源密集型任務,方法是將值減少為小於預設值,以允許每個任務擁有更多容量。