

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

# Amazon EMR 的進階擴展
<a name="managed-scaling-allocation-strategy-optimized"></a>

從 EC2 7.0 版上的 Amazon EMR 開始，您可以利用進階擴展來控制叢集的資源使用率。Advanced Scaling 引入了使用率效能擴展，以根據您的業務需求調整資源使用率和效能等級。您設定的 值會決定您的叢集是否加權更多，以節省資源或擴展以處理service-level-agreement(SLA) 敏感工作負載，其中快速完成至關重要。調整擴展值時，受管擴展會解譯您的意圖，並智慧擴展以最佳化資源。如需受管擴展的詳細資訊，請參閱[設定 Amazon EMR 的受管擴展](https://docs.aws.amazon.com/emr/latest/ManagementGuide/managed-scaling-configure.html)。

## 進階擴展設定
<a name="managed-scaling-allocation-strategy-optimized-strategies"></a>

您為進階擴展設定的值會根據您的需求最佳化叢集。值範圍為 **1**-**100**。可能的值為 **1**、**25**、**50**、**75** 和 **100**。如果您將索引設定為這些值以外的值，則會導致驗證錯誤。

擴展值對應至資源利用策略。下列清單定義了其中數個項目：
+ **使用率最佳化 【1】** – 此設定可防止資源過度佈建。當您想要保持低成本並優先考慮有效率的資源使用率時，請使用較低的值。它會導致叢集以較不積極的方式擴展。當工作負載經常激增，而且您不希望資源快速增加時，這適用於使用案例。
+ **平衡 【50】** – 這可平衡資源使用率和任務效能。此設定適用於大多數階段具有穩定執行時間的穩定工作負載。它也適用於具有短期和長期執行階段混合的工作負載。如果您不確定要選擇哪個設定，建議您從此設定開始。
+ ** 效能最佳化 【100】** – 此策略會優先考慮效能。叢集會積極擴展，以確保任務快速完成並符合效能目標。效能最佳化適用於service-level-agreement(SLA) 敏感的工作負載，其中快速執行時間至關重要。

**注意**  
可用的中繼值可在策略之間提供中間基礎，以微調叢集的進階擴展行為。

## 進階擴展的優點
<a name="managed-scaling-allocation-strategy-optimized-benefits"></a>

由於您的環境和需求各有不同，例如變更資料磁碟區、成本目標調整和 SLA 實作，叢集擴展可協助您調整叢集組態以達成目標。主要優點包括：
+ **增強精細控制** – 引進使用率效能設定可讓您根據需求輕鬆調整叢集的擴展行為。您可以擴展以滿足運算資源的需求，或根據您的使用模式縮減以節省資源。
+ **改善成本最佳化** – 您可以根據需求選擇低使用率值，以便更輕鬆地滿足您的成本目標。

## 最佳化入門
<a name="managed-scaling-allocation-strategy-optimized-getting-started"></a>

**設定和組態**

使用這些步驟來設定效能索引並最佳化您的擴展策略。

1. 下列命令會使用使用率最佳化`[1]`擴展策略更新現有叢集：

   ```
   aws emr put-managed-scaling-policy --cluster-id 'cluster-id' \
    --managed-scaling-policy '{
     "ComputeLimits": {
       "UnitType": "Instances",
       "MinimumCapacityUnits": 1,
       "MaximumCapacityUnits": 2,
       "MaximumOnDemandCapacityUnits": 2,
       "MaximumCoreCapacityUnits": 2
     },
     "ScalingStrategy": "ADVANCED",
     "UtilizationPerformanceIndex": "1"
   }' \
    --region "region-name"
   ```

   屬性 `ScalingStrategy`和 `UtilizationPerformanceIndex`是新的，且與擴展最佳化相關。您可以在受管擴展政策中為 `UtilizationPerformanceIndex` 屬性設定對應的值 (1、25、50、75 和 100)，以選取不同的擴展策略。

1. 若要還原至預設受管擴展策略，請執行 `put-managed-scaling-policy`命令，而不包含 `ScalingStrategy`和 `UtilizationPerformanceIndex` 屬性。（這是選用的。) 此範例示範如何執行此操作：

   ```
   aws emr put-managed-scaling-policy \
   --cluster-id 'cluster-id' \
   --managed-scaling-policy '{"ComputeLimits":{"UnitType":"Instances","MinimumCapacityUnits":1,"MaximumCapacityUnits":2,"MaximumOnDemandCapacityUnits":2,"MaximumCoreCapacityUnits":2}}' \
   --region "region-name"
   ```

**使用監控指標來追蹤叢集使用率**

從 EMR 7.3.0 版開始，Amazon EMR 發佈了四個與記憶體和虛擬 CPU 相關的新指標。您可以使用這些來測量跨擴展策略的叢集使用率。這些指標可用於任何使用案例，但您可以使用此處提供的詳細資訊來監控進階擴展。

可用的實用指標包括下列項目：
+ **YarnContainersUsedMemoryGBSeconds** – YARN 管理的應用程式所耗用的記憶體量。
+ **YarnContainersTotalMemoryGBSeconds** – 在叢集中配置給 YARN 的總記憶體容量。
+ **YarnNodesUsedVCPUSeconds** – YARN 管理的每個應用程式的總 VCPU 秒數。
+ **YarnNodesTotalVCPUSeconds** – 所耗用記憶體的彙總總 VCPU 秒數，包括尚未準備好 yarn 的時段。

您可以使用 Amazon CloudWatch Logs Insights 分析資源指標。功能包括專門建置的查詢語言，可協助您擷取特定於資源使用和擴展的指標。

下列查詢可在 Amazon CloudWatch 主控台中執行，使用指標數學計算平均記憶體使用率 (e1)，方法是將耗用記憶體 (e2) 的執行中總和除以總記憶體 (e3) 的執行中總和：

```
{
    "metrics": [
        [ { "expression": "e2/e3", "label": "Average Mem Utilization", "id": "e1", "yAxis": "right" } ],
        [ { "expression": "RUNNING_SUM(m1)", "label": "RunningTotal-YarnContainersUsedMemoryGBSeconds", "id": "e2", "visible": false } ],
        [ { "expression": "RUNNING_SUM(m2)", "label": "RunningTotal-YarnContainersTotalMemoryGBSeconds", "id": "e3", "visible": false } ],
        [ "AWS_EMR_ManagedResize", "YarnContainersUsedMemoryGBSeconds", "ACCOUNT_ID", "793684541905", "COMPONENT", "ManagerService", "JOB_FLOW_ID", "cluster-id", { "id": "m1", "label": "YarnContainersUsedMemoryGBSeconds" } ],
        [ ".", "YarnContainersTotalMemoryGBSeconds", ".", ".", ".", ".", ".", ".", { "id": "m2", "label": "YarnContainersTotalMemoryGBSeconds" } ]
    ],
    "view": "timeSeries",
    "stacked": false,
    "region": "region",
    "period": 60,
    "stat": "Sum",
    "title": "Memory Utilization"
}
```

若要查詢日誌，您可以在 AWS 主控台中選取 CloudWatch。如需撰寫 CloudWatch 查詢的詳細資訊，請參閱《Amazon [ CloudWatch Logs 使用者指南》中的使用 CloudWatch Logs Insights 分析日誌資料](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html)。 Amazon CloudWatch 

下圖顯示範例叢集的這些指標：

![\[顯示使用率統計資料的圖表。\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ManagementGuide/images/scaling_graph_EMR.png)


## 考量和限制
<a name="managed-scaling-allocation-strategy-optimized-considerations"></a>
+ 擴展策略的有效性可能會有所不同，這取決於您唯一的工作負載特性和叢集組態。建議您試用擴展設定，以判斷適合您使用案例的最佳索引值。
+ Amazon EMR Advanced Scaling 特別適合批次工作負載。對於 SQL/資料倉儲和串流工作負載，建議使用預設的受管擴展策略來獲得最佳效能。
+ 在叢集中啟用節點標籤組態時，不支援 Amazon EMR Advanced Scaling。如果叢集中同時啟用進階擴展和節點標籤組態，擴展行為就好像預設的受管擴展設定已啟用一樣。
+ 效能最佳化擴展策略可維持比預設受管擴展策略更長的高度運算資源，進而加快任務執行速度。此模式會排定快速擴展以符合資源需求的優先順序，進而更快速地完成任務。相較於預設策略，這可能會導致較高的成本。
+ 在叢集已最佳化且充分利用的情況下，啟用進階擴展可能不會提供額外的優勢。在某些情況下，啟用進階擴展可能會導致成本增加，因為工作負載可能會執行更久。在這些情況下，我們建議您使用預設的受管擴展策略，以確保最佳的資源配置和成本效益。
+ 在受管擴展的環境中，重點會隨著 設定從效能最佳化 【**100**】 調整為使用率最佳化 【**1**】，而隨著執行時間而轉移到資源使用率。不過，請務必注意，結果可能會根據工作負載的性質和叢集的拓撲而有所不同。為了確保您的使用案例獲得最佳結果，強烈建議使用工作負載測試擴展策略，以判斷最適合的設定。
+ **PerformanceUtilizationIndex** 僅接受下列值：
  + **1**
  + **25**
  + **50**
  + **75**
  + **100**

  提交的任何其他值都會導致驗證錯誤。