本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Auto Scaling 適用於您的 AWS Glue ETL、互動式工作階段和 3.0 AWS Glue版或更新版本的串流任務。
啟用 Auto Scaling 功能後,您可以獲得下列好處:
-
AWS Glue 根據每個階段的平行處理或任務執行的微批次,向叢集自動新增和從叢集自動移除工作者。
-
它減少了您實驗的需求,並決定要為 AWS Glue ETL 任務指派的工作者數量。
-
使用指定的工作者數量上限, AWS Glue會為工作負載選擇適當大小的資源。
-
透過在 AWS Glue Studio 中的任務執行詳細資訊頁面上檢視 CloudWatch 指標,您可以了解叢集大小在任務執行期間的變更情況。
適用於 AWS Glue ETL 和串流任務的 Auto Scaling 可讓您隨需擴展和縮減AWS Glue任務的運算資源。隨需縱向擴展可協助您在任務執行最初啟動時僅分配所需的運算資源,以及根據任務期間的需求佈建所需的資源。
Auto Scaling 也支援AWS Glue在任務過程中動態縮減任務資源。在任務執行期間,當您的 Spark 應用程式請求更多執行器時,可將更多的工作者新增至叢集。當執行器在沒有已啟用運算任務的情況下閒置時,就會刪除該執行器和相應的工作者。
Auto Scaling 可協助 Spark 應用程式的成本和使用率的常見案例包括:
-
a Spark 驅動程式列出 Amazon S3 中的大量檔案,或在執行器處於非作用中狀態時執行載入
-
由於過度佈建,只使用幾個執行器執行的 Spark 階段
-
跨 Spark 階段的資料偏移或不平均的運算需求
要求
Auto Scaling 僅適用於 AWS Glue 3.0 版或更高版本。要使用 Auto Scaling,您可以遵循遷移指南,將現有的任務遷移至 AWS Glue 3.0 版或更高版本,或使用 AWS Glue 3.0 版或更高版本建立新任務。
自動擴展適用於具備 G.1X
、G.2X
、G.4X
、G.8X
或 G.025X
(僅限串流任務) 工作者類型的 AWS Glue 任務。不支援標準的 CPU。
在 AWS Glue Studio 中啟用 Auto Scaling
在 AWS Glue Studio 中的任務詳細資訊索引標籤上,選擇做為 Spark 或 Spark 串流的類型,以及做為 Glue 3.0
或更新版本的 Glue 版本。然後,工作者類型下方會出現核取方塊。
-
選取 Automatically scale the number of workers (自動擴展工作者數量) 選項。
-
設定 Maximum number of workers (工作者數上限) 以定義可提供給任務執行的工作者數上限。

使用 CLI 或 SDK AWS 啟用 Auto Scaling
若要從 AWS CLI 啟用 Auto Scaling 以進行任務執行,start-job-run
請使用下列組態執行 :
{
"JobName": "<your job name>",
"Arguments": {
"--enable-auto-scaling": "true"
},
"WorkerType": "G.2X", // G.1X and G.2X are allowed for Auto Scaling Jobs
"NumberOfWorkers": 20, // represents Maximum number of workers
...other job run configurations...
}
在 ETL 任務執行完成後,您也可以呼叫 get-job-run
以檢查任務執行的實際資源使用情況 (以 DPU 秒為單位)。注意:新欄位 DPUSeconds 只會針對已啟用 Auto Scaling 的 AWS Glue 4.0 或更新版本上的批次任務顯示。此欄位不支援串流任務。
$ aws glue get-job-run --job-name your-job-name --run-id jr_xx --endpoint https://glue.us-east-1.amazonaws.com --region us-east-1
{
"JobRun": {
...
"GlueVersion": "3.0",
"DPUSeconds": 386.0
}
}
您還可以使用具有相同組態的 AWS Glue SDK 為任務執行設定 Auto Scaling。
使用互動式工作階段啟用 Auto Scaling
若要在使用互動式工作階段建置 AWS Glue 任務時啟用 Auto Scaling,請參閱設定 AWS Glue 互動式工作階段。
提示和考量事項
微調 AWS Glue Auto Scaling 的秘訣和考量事項:
-
如果您對於工作者數量上限的初始值沒有任何想法,您可以從預估 AWS Glue DPU 中說明的粗略計算開始。您不應該為非常低的磁碟區資料設定工作者數量上限中的非常大的值。
-
AWS Glue Auto Scaling
spark.default.parallelism
會根據任務上設定的 DPU 數量上限 (以工作者數量上限和工作者類型計算) 來設定spark.sql.shuffle.partitions
和 。如果您偏好這些組態上的固定值,您可以使用下列任務參數覆寫這些參數:-
索引鍵:
--conf
-
Value (值):
spark.sql.shuffle.partitions=200 --conf spark.default.parallelism=200
-
-
根據預設,對於串流任務, AWS Glue 不會在微批次內自動擴展,而且需要多個微批次才能啟動自動擴展。如果您想要在微批次中啟用自動擴展,請提供
--auto-scale-within-microbatch
。如需詳細資訊,請參閱任務參數參考 。
使用 Amazon CloudWatch 指標監控 Auto Scaling
CloudWatch 執行器指標可供 AWS Glue 3.0 或更新的任務使用 (如果您啟用 Auto Scaling)。這些指標可用於監控在透過 Auto Scaling 啟用之 Spark 應用程式中的執行器需求和最佳化使用情況。如需詳細資訊,請參閱使用 Amazon CloudWatch 指標監控 AWS Glue。
您也可以利用可 AWS Glue 觀測性指標來取得資源使用率的洞見。例如,透過監控 glue.driver.workerUtilization
,您可以監控實際使用多少資源,無論是否使用自動擴展。另一個範例是,透過監控 glue.driver.skewness.job
和 glue.driver.skewness.stage
,您可以查看資料如何扭曲。這些洞見將協助您決定啟用自動擴展並微調組態。如需詳細資訊,請參閱使用 監控使用 AWS Glue 可觀測性指標進行監控。
-
glue.driver.ExecutorAllocationManager.executors.numberAllExecutors
-
glue.driver.ExecutorAllocationManager.executors.numberMaxNeededExecutors
如需關於這些指標的詳細資訊,請參閱 DPU 容量規劃監控。
注意
CloudWatch 執行器指標不適用於互動式工作階段。

使用 Amazon CloudWatch Logs 監控 Auto Scaling
如果您使用的是互動式工作階段,您可以透過啟用連續 Amazon CloudWatch Logs 並在日誌中搜尋「執行器」,或使用 Spark UI 來監控執行器的數量。若要執行此操作,請使用 %%configure
魔術來啟用與 一起的持續記錄enable auto scaling
。
%%configure{
"--enable-continuous-cloudwatch-log": "true",
"--enable-auto-scaling": "true"
}
在 Amazon CloudWatch Logsevents 中,在日誌中搜尋「執行器」:

使用 Spark UI 監控 Auto Scaling
啟用 Auto Scaling 後,您還可以使用 Glue Spark UI,藉助動態擴充規模和縮減規模,根據 AWS Glue 任務中的需求監控正在新增和移除的執行器。如需詳細資訊,請參閱為 AWS Glue 任務啟用 Apache Spark web UI。
當您從 Jupyter 筆記本使用互動式工作階段時,您可以執行下列魔術來啟用自動擴展和 Spark UI:
%%configure{
"--enable-auto-scaling": "true",
"--enable-continuous-cloudwatch-log": "true"
}

監控 Auto Scaling 任務執行 DPU 使用情況
您可以使用 AWS Glue Studio 任務執行檢視以檢查 Auto Scaling 任務的 DPU 使用情況。
-
從 AWS Glue Studio 導覽窗格中選擇監控。Monitoring (監控) 頁面隨即出現。
-
向下捲動到 Job runs (任務執行) 圖表。
-
導覽到您所需的任務執行,然後捲動到 DPU 時數欄以檢查特定任務執行的使用情況。
限制
AWS Glue 串流 Auto Scaling 目前不支援與在 ForEachBatch
外部建立之靜態 DataFrame 聯結的串流 DataFrame。在 ForEachBatch
內部建立的靜態 DataFrame 將按預期工作。