本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon MWAA 上 Apache Airflow 的效能調校
本主題說明如何使用 調整 Amazon Managed Workflows for Apache Airflow 環境的效能在 Amazon MWAA 上使用 Apache Airflow 組態選項。
新增 Apache Airflow 組態選項
使用下列程序將 Airflow 組態選項新增至您的環境。
-
在 Amazon MWAA 主控台上開啟環境頁面。
-
選擇環境。
-
選擇編輯。
-
選擇下一步。
-
在 Airflow 組態選項窗格中選擇新增自訂組態。
-
從下拉式清單中選擇組態並輸入值,或輸入自訂組態並輸入值。
-
針對您要新增的每個組態,選擇新增自訂組態。
-
選擇儲存。
若要進一步了解,請參閱 在 Amazon MWAA 上使用 Apache Airflow 組態選項。
Apache Airflow 排程器
Apache Airflow 排程器是 Apache Airflow 的核心元件。排程器的問題可防止剖析 DAGs 和排程任務。如需 Apache Airflow 排程器調校的詳細資訊,請參閱 Apache Airflow 文件網站上的微調排程器效能。
Parameters
本節說明 Apache Airflow 排程器 (Apache Airflow v2 和更新版本) 可用的組態選項及其使用案例。
- Apache Airflow v3
-
| 組態 |
使用案例 |
|
celery.sync_parallelism
Celery Executor 用來同步任務狀態的程序數目。
預設值:1
|
使用此選項可透過限制 Celery Executor 使用的程序來防止佇列衝突。根據預設, 值會設定為 1 ,以防止將任務日誌交付至 CloudWatch Logs 時發生錯誤。將值設定為 0表示使用最大數量的程序,但在交付任務日誌時可能會導致錯誤。
|
|
scheduler.scheduler_idle_sleep_time
如果迴圈中沒有任何動作,則在連續排程器「迴圈」之間等待的秒數。
預設值:1
|
使用此選項可在排程器完成「迴圈」後增加排程器休眠的時間,以釋放排程器上的 CPU 用量。增加此值可減少 dag_processor.parsing_processes Apache Airflow v3 中可用的排程器執行緒。這可以減少排程器剖析 DAGs 的容量,並增加 DAGs 在 Web 伺服器中填入所需的時間。
|
|
scheduler.max_dagruns_to_create_per_loop
為每個排程器「迴圈」建立 DagRuns 的 DAGs 數目上限。
預設值:10
|
使用此選項可透過減少排程器「迴圈」的 DagRuns 數目上限,釋放用於排程任務的資源。
|
|
dag_processor.parsing_processes
排程器可以平行執行以排程 DAGs執行緒數目。
預設:使用 (2 * number of vCPUs) - 1
|
使用此選項可透過減少排程器平行執行以剖析 DAGs 的程序數目來釋放資源。如果 DAG 剖析影響任務排程,建議您將此數字保持低。您必須指定不超過環境類別可用執行緒數目的值,最多 ,(2 * number of vCPUs) - 1因為排程器預留了一個執行緒。若要進一步了解,請參閱限制。
|
- Apache Airflow v2
-
| 組態 |
使用案例 |
|
celery.sync_parallelism
Celery Executor 用來同步任務狀態的程序數目。
預設值:1
|
使用此選項可透過限制 Celery Executor 使用的程序來防止佇列衝突。根據預設, 值會設定為 1 ,以防止將任務日誌交付至 CloudWatch Logs 時發生錯誤。將值設定為 0表示使用最大數量的程序,但在交付任務日誌時可能會導致錯誤。
|
|
scheduler.scheduler_idle_sleep_time
如果迴圈中沒有任何動作,則在連續排程器「迴圈」之間等待的秒數。
預設值:1
|
使用此選項可在排程器完成「迴圈」後增加排程器休眠的時間,以釋放排程器上的 CPU 用量。增加此值可減少 scheduler.parsing_processes Apache Airflow v2 中可用的排程器執行緒。這可以減少排程器剖析 DAGs 的容量,並增加 DAGs 在 Web 伺服器中填入所需的時間。
|
|
scheduler.max_dagruns_to_create_per_loop
為每個排程器「迴圈」建立 DagRuns 的 DAGs 數目上限。
預設值:10
|
使用此選項可透過減少排程器「迴圈」的 DagRuns 數目上限,釋放用於排程任務的資源。
|
|
scheduler.parsing_processes
排程器可以平行執行以排程 DAGs執行緒數目。
預設:使用 (2 * number of vCPUs) - 1
|
使用此選項可透過減少排程器平行執行以剖析 DAGs 的程序數目來釋放資源。如果 DAG 剖析影響任務排程,建議您將此數字保持低。您必須指定不超過環境類別可用執行緒數目的值,最多 ,(2 * number of vCPUs) - 1因為排程器預留了一個執行緒。若要進一步了解,請參閱限制。
|
限制
本節說明調整排程器的預設參數時應考慮的限制。
- scheduler.parsing_processes、scheduler.max_threads (僅限 v2)
-
環境類別的每個 vCPU 允許兩個執行緒。環境類別的排程器必須至少保留一個執行緒。如果您注意到任務排程延遲,您可能需要增加環境類別。例如,大型環境的排程器具有 4 個 vCPU Fargate 容器執行個體。這表示執行緒7總數上限為 ,可用於其他程序。也就是說,兩個執行緒會乘以四個 vCPUs,減去排程器本身的一個 vCPU。您在 scheduler.max_threads(僅限 v2) 中指定的值,且scheduler.parsing_processes不得超過 環境類別可用的執行緒數目,如下所示:
-
mw1.small – 不得超過其他程序的1執行緒。剩餘的執行緒會保留給排程器。
-
mw1.medium – 不得超過其他程序的3執行緒。剩餘的執行緒會保留給排程器。
-
mw1.large – 不得超過其他程序的7執行緒。剩餘的執行緒會保留給排程器。
DAG 資料夾
Apache Airflow 排程器會持續掃描您環境中DAGs 資料夾。任何包含plugins.zip的檔案,或包含「airflow」匯入陳述式的 Python (.py) 檔案。然後,任何產生的 Python DAG 物件都會放入 DagBag 中,以供排程器處理該檔案,以決定需要排程哪些任務。無論檔案是否包含任何可行的 DAG 物件,都會進行大型檔案剖析。
Parameters
本節說明 DAGs (Apache Airflow v2 及更新版本) 可用的組態選項及其使用案例。
- Apache Airflow v3
-
- Apache Airflow v2
-
DAG 檔案
做為 Apache Airflow 排程器迴圈的一部分,會剖析個別 DAG 檔案以擷取 DAG Python 物件。在 Apache Airflow v2 和更新版本中,排程器會同時剖析最多 個剖析程序。scheduler.min_file_process_interval (v2) 或 dag_processor.min_file_process_interval(v3) 中指定的秒數必須先通過,才能再次剖析相同的檔案。
Parameters
本節說明 Apache Airflow DAG 檔案 (Apache Airflow v2 及更新版本) 可用的組態選項及其使用案例。
- Apache Airflow v3
-
- Apache Airflow v2
-
任務
Apache Airflow 排程器和工作者都參與佇列和取消佇列任務。排程器會將準備從無狀態排程的剖析任務轉換為已排程狀態。執行器也會在 Fargate 的排程器容器上執行,將這些任務排入佇列,並將其狀態設定為已排入佇列。當工作者有容量時,會從佇列中取得任務,並將狀態設定為執行中,然後根據任務是否成功,將其狀態變更為成功或失敗。
Parameters
本節說明 Apache Airflow 任務可用的組態選項及其使用案例。
Amazon MWAA 覆寫的預設組態選項會以紅色標示。
- Apache Airflow v3
-
| 組態 |
使用案例 |
|
core.parallelism
每個排程器可同時監控和執行的任務執行個體數量上限。
預設:根據 動態設定(maxWorkerCount * maxCeleryWorkerSlots) / schedulers * 1.5。
|
使用此選項來控制執行中任務總數的硬式全域上限。例如,您可以減少此值,以保護中繼資料庫免於過多並行連線或限制成本。增加此值可讓更多任務同時執行。預設值很高,因此其他控制項 (worker_autoscale、集區插槽、max_active_tasks_per_dag) 可做為有效的並行限制。
|
|
core.max_active_tasks_per_dag
每次 DAG 執行中允許同時執行的任務執行個體數目上限。
預設:16
|
使用此選項可透過增加允許同時執行的任務執行個體數量來釋放資源。例如,如果您有 100 DAGs 10 個平行任務的 DAG,並希望所有 DAGs 同時執行,請計算平行處理上限。將可用工作者的數量乘以 中的任務密度celery.worker_concurrency,然後除以 DAGs 的數量。
|
|
core.execute_tasks_new_python_interpreter
決定 Apache Airflow 是否透過強制執行父程序,或建立新的 Python 程序來執行任務。
預設:True
|
設定為 時True,Apache Airflow 會將您對外掛程式所做的變更辨識為新的 Python 程序,以便建立以執行任務。
|
|
celery.worker_concurrency
Amazon MWAA 會覆寫此選項的 Airflow 基本安裝,以擴展工作者作為其自動擴展元件的一部分。
預設:不適用
|
此選項指定的任何值都會遭到忽略。
|
|
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並行任務,無論是否有足夠資源可以這樣做。如果任務排程時沒有足夠的資源,任務會立即失敗。我們建議將此值變更為資源密集型任務,方法是將值減少為小於預設值,以允許每個任務更多的容量。
|
- Apache Airflow v2
-
| 組態 |
使用案例 |
|
core.parallelism
每個排程器可同時監控和執行的任務執行個體數量上限。
預設:根據 動態設定(maxWorkerCount * maxCeleryWorkerSlots) / schedulers * 1.5。
|
使用此選項來控制執行中任務總數的硬式全域上限。例如,您可以減少此值,以保護中繼資料庫免於過多並行連線或限制成本。增加此值可讓更多任務同時執行。預設值很高,因此其他控制項 (worker_autoscale、集區插槽、max_active_tasks_per_dag) 可做為有效的並行限制。
|
|
core.dag_concurrency
允許為每個 DAG 同時執行的任務執行個體數目。
預設:16
此組態自 Airflow 2.2.0 以來已棄用,並已由 取代。 core.max_active_tasks_per_dag
|
使用此選項可透過增加允許同時執行的任務執行個體數量來釋放資源。例如,如果您有 100 DAGs 10 個平行任務的 DAG,並希望所有 DAGs 同時執行,請計算平行處理上限。將可用工作者的數量乘以 中的任務密度celery.worker_concurrency,然後除以 DAGs 的數量。
|
|
core.execute_tasks_new_python_interpreter
決定 Apache Airflow 是否透過強制執行父程序,或建立新的 Python 程序來執行任務。
預設:True
|
設定為 時True,Apache Airflow 會將您對外掛程式所做的變更辨識為新的 Python 程序,以便建立以執行任務。
|
|
celery.worker_concurrency
Amazon MWAA 會覆寫此選項的 Airflow 基本安裝,以擴展工作者作為其自動擴展元件的一部分。
預設:不適用
|
此選項指定的任何值都會遭到忽略。
|
|
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並行任務,無論是否有足夠資源可以這樣做。如果任務排程時沒有足夠的資源,任務會立即失敗。我們建議將此值變更為資源密集型任務,方法是將值減少為小於預設值,以允許每個任務更多的容量。
|