本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon 上 Apache Airflow 的效能調校 MWAA
本主題說明如何使用 調整 Amazon Managed Workflows for Apache Airflow 環境的效能在 Amazon MWAA 上使用 Apache Airflow 組態選項。
新增 Apache Airflow 組態選項
下列程序會逐步引導您將 Airflow 組態選項新增至環境的步驟。
-
在 Amazon MWAA主控台上開啟環境頁面。
-
選擇環境。
-
選擇編輯。
-
選擇 Next (下一步)。
-
在 Airflow 組態選項窗格中選擇新增自訂組態。
-
從下拉式清單中選擇組態並輸入值,或輸入自訂組態並輸入值。
-
針對您要新增的每個組態,選擇新增自訂組態。
-
選擇 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_threads
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的物件,都會進行大型檔案剖析。
參數
本節說明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 並行任務,無論是否有足夠資源可以這樣做。如果任務排程時沒有足夠的資源,任務會立即失敗。我們建議將此值變更為資源密集型任務,方法是將值減少為小於預設值,以允許每個任務擁有更多容量。
|