

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

# 使用面向 AWS Glue 的自動擴展
<a name="auto-scaling"></a>

在 AWS Glue 3.0 版或更新版本中，Auto Scaling 適用於 AWS Glue ETL、互動式工作階段和串流任務。

啟用 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 應用程式的成本和使用率的常見場景包括：
+  列出 Amazon S3 中大量檔案或在執行器處於非作用中狀態時執行載入的 Spark 驅動程式 
+  由於過度佈建，只使用幾個執行器執行的 Spark 階段 
+  跨 Spark 階段的資料扭曲或不平均的運算需求 

## 要求
<a name="auto-scaling-requirements"></a>

Auto Scaling 僅適用於 AWS Glue 3.0 版或更高版本。要使用 Auto Scaling，您可以遵循[移轉指南](https://docs.aws.amazon.com/glue/latest/dg/migrating-version-30.html)，將現有的任務移轉至 AWS Glue 3.0 版或更高版本，或使用 AWS Glue 3.0 版或更高版本建立新任務。

Auto Scaling 適用於工作者類型為 `G.1X`、`G.2X`、`G.4X`、`G.8X`、`G.12X`、`G.16X`、`R.1X`、`R.2X`、`R.4X`、`R.8X` 或 `G.025X` (僅限串流任務) 的 AWS Glue 任務。Auto Scaling 不支援標準 DPU。

## 在 AWS Glue Studio 中啟用 Auto Scaling
<a name="auto-scaling-enabling"></a>

在 AWS Glue Studio 中的**任務詳細資訊**索引標籤上，選擇 **Spark** 或 **Spark Streaming** 類型，並將 **Glue 版本**選為 **Glue 3.0** 或更高版本。然後，一個核取方塊將顯示在**工作者類型**下方。
+ 選取 **Automatically scale the number of workers** (自動擴展工作者數量) 選項。
+ 設定 **Maximum number of workers** (工作者數上限) 以定義可提供給任務執行的工作者數上限。

![\[在 AWS Glue Studio 中啟用和設定 Auto Scaling\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/auto-scaling-enable-studio.png)


## 使用 CLI 或 SDK AWS 啟用 Auto Scaling
<a name="auto-scaling-enabling-cli-sdk"></a>

若要從 AWS CLI 為任務執行啟用 Auto Scaling，`start-job-run`請使用下列組態執行 ：

```
{
    "JobName": "<your job name>",
    "Arguments": {
        "--enable-auto-scaling": "true"
    },
    "WorkerType": "G.2X", // G.1X, G.2X, G.4X, G.8X, G.12X, G.16X, R.1X, R.2X, R.4X, and R.8X are supported 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](https://docs.aws.amazon.com/glue/latest/webapi/API_StartJobRun.html) 為任務執行設定 Auto Scaling。

## 使用互動式工作階段啟用 Auto Scaling
<a name="auto-scaling-enabling-interactive-sessions"></a>

 若要在使用互動式工作階段建置 AWS Glue 任務時啟用 Auto Scaling，請參閱[設定 AWS Glue 互動式工作階段](https://docs.aws.amazon.com/glue/latest/dg/interactive-sessions-magics.html)。

## 秘訣和考量
<a name="auto-scaling-tips-and-considerations"></a>

 微調 AWS Glue Auto Scaling 的秘訣和考量事項：
+  如果您對工作者數量上限的初始值有任何疑問，您可以從[預估 AWS Glue DPU ](https://docs.aws.amazon.com/whitepapers/latest/aws-glue-best-practices-build-performant-data-pipeline/building-a-cost-effective-data-pipeline.html) 中說明的粗略計算開始。對於非常少量的資料，您不應該將工作者數目上限設定得極大。
+  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`。如需詳細資訊，請參閱[任務參數參考](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-glue-arguments.html#job-parameter-reference)。

## 使用 Amazon CloudWatch 指標監控 Auto Scaling
<a name="auto-scaling-monitor-cloud-watch"></a>

CloudWatch 執行器指標可供 AWS Glue 3.0 或更新的任務使用 (如果您啟用 Auto Scaling)。這些指標可用於監控在透過 Auto Scaling 啟用之 Spark 應用程式中的執行器需求和最佳化使用情況。如需詳細資訊，請參閱[使用 Amazon CloudWatch 指標監控 AWS Glue](monitoring-awsglue-with-cloudwatch-metrics.md)。

 您也可以利用可 AWS Glue 觀測性指標來深入了解資源使用率。例如，透過監控 `glue.driver.workerUtilization`，您可以監控實際使用多少資源 (無論是否使用自動擴展)。另一個範例是，透過監控 `glue.driver.skewness.job` 和 `glue.driver.skewness.stage`，您可以查看資料是如何扭曲的。這些洞察將協助您決定啟用自動擴展並微調組態。如需詳細資訊，請參閱「使用 [使用 AWS Glue 可觀測性指標進行監控](monitor-observability.md) 進行監控」。
+ glue.driver.ExecutorAllocationManager.executors.numberAllExecutors
+ glue.driver.ExecutorAllocationManager.executors.numberMaxNeededExecutors

如需關於這些指標的詳細資訊，請參閱 [DPU 容量規劃監控](monitor-debug-capacity.md)。

**注意**  
 CloudWatch 執行器指標不適用於互動式工作階段。

![\[使用 Amazon CloudWatch 指標監控 Auto Scaling\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/auto-scaling-monitor-metrics.png)


## 使用 Amazon CloudWatch Logs 監控 Auto Scaling
<a name="auto-scaling-monitor-cloudwatch-logs"></a>

 如果您使用的是互動式工作階段，您可以透過啟用連續的 Amazon CloudWatch Logs 並在日誌中搜尋「執行器」，或使用 Spark UI 來監控執行器的數目。若要這樣做，請使用 `%%configure` 魔法來啟用連續的日誌記錄和 `enable auto scaling`。

```
%%configure{
    "--enable-continuous-cloudwatch-log": "true",
    "--enable-auto-scaling": "true"
}
```

 在 Amazon CloudWatch Logsevents 中，在日誌中搜尋「執行器」：

![\[使用 Amazon CloudWatch 指標監控 Auto Scaling\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/cloudwatch-metrics-search-executor.png)


## 使用 Spark UI 監控 Auto Scaling
<a name="auto-scaling-monitor-spark-ui"></a>

 啟用 Auto Scaling 後，您還可以使用 Glue Spark UI，藉助動態擴充規模和縮減規模，根據 AWS Glue 任務中的需求監控正在新增和移除的執行器。如需詳細資訊，請參閱[為 AWS Glue 任務啟用 Apache Spark web UI](monitor-spark-ui-jobs.md)。

 當您從 Jupyter 筆記本使用互動式工作階段時，您可以執行下列魔法來啟用自動擴展和 Spark UI：

```
%%configure{
    "--enable-auto-scaling": "true",
    "--enable-continuous-cloudwatch-log": "true"
}
```

![\[使用 Spark UI 監控 Auto Scaling。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/auto-scaling-monitor-spark-ui.png)


## 監控 Auto Scaling 任務執行 DPU 使用情況
<a name="auto-scaling-monitor-dpu-usage"></a>

您可以使用 [AWS Glue Studio 任務執行檢視](https://docs.aws.amazon.com/glue/latest/ug/monitoring-chapter.html)以檢查 Auto Scaling 任務的 DPU 使用情況。

1. 從 AWS Glue Studio 導覽窗格中選擇**監控**。Monitoring (監控) 頁面隨即出現。

1. 向下捲動到 Job runs (任務執行) 圖表。

1. 導覽到您所需的任務執行，然後捲動到 DPU 時數欄以檢查特定任務執行的使用情況。

## 限制
<a name="auto-scaling-limitations"></a>

AWS Glue 串流 Auto Scaling 目前不支援與在 `ForEachBatch` 外部建立之靜態 DataFrame 聯結的串流 DataFrame。在 `ForEachBatch` 內部建立的靜態 DataFrame 將按預期工作。