

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

# 使用 Amazon EMR 叢集擴展來調整不斷變化的工作負載


您可以自動或手動調整提供給 Amazon EMR 叢集使用的 Amazon EC2 執行個體數量，以應對具有不同需求的工作負載。若要使用自動擴展，您可以選擇兩個方法進行。可以啟用 Amazon EMR 受管擴展功能，或建立自訂自動擴展政策。下表說明這兩個選項之間的差異。


|  | Amazon EMR 受管擴展功能 | 自訂自動擴展 | 
| --- | --- | --- | 
|  擴展政策和規則  |  無任何必要政策。Amazon EMR 會持續評估叢集指標，並做出優化的擴展決策，進行自動擴展活動的管理。  |  您需要定義和管理自動擴展政策和規則，例如可觸發擴展活動、評估期間、冷卻期間等特定條件。  | 
|  支援的 Amazon EMR 版本  |  Amazon EMR 5.30.0 版及更新版本 (Amazon EMR 6.0.0 版本除外)  |  Amazon EMR 4.0.0 版及更新版本  | 
|  支援的叢集組成  | 執行個體群組或執行個體機群 |  限執行個體群組  | 
| 擴展限制設定 |  可對整個叢集設定擴展限制。  |  只能對個別執行個體群組設定擴展限制。  | 
|  指標評估頻率   |  每 5 秒至 10 秒一次 經常評估指標，可讓 Amazon EMR 做出更精確的擴展決策。  |  評估期間的增量限定為五分鐘。  | 
|  支援的應用程式  |  僅支援 YARN 應用程式，例如 Spark、Hadoop、Hive、Flink。Amazon EMR 受管擴展功能不支援非 YARN 型應用程式，例如 Presto 或 HBase。  |  在定義自動擴展規則時，您可以選擇支援哪些應用程式。  | 

## 考量事項

+ Amazon EMR 叢集始終包含一個或三個主節點。初始設定叢集之後，只能擴展核心節點和任務節點。無法擴展叢集的主節點數量。
+ 對於執行個體群組，重新設定操作和調整大小操作會連續出現，但不會同時出現。如果在執行個體群組正調整大小時啟動重新設定，則重新設定會在執行個體群組完成正在進行的調整大小後啟動。相反地，如果您在執行個體群組忙於重新設定時啟動調整大小操作，調整大小會在重新設定完成後開始。

# 在 Amazon EMR 中使用受管擴展功能
受管擴展

**重要**  
我們強烈建議您使用最新的 Amazon EMR 版本 (Amazon EMR 7.12.0) 進行受管擴展。在某些早期版本中，可能會遇到間歇性的應用程式故障或擴展延遲。Amazon EMR 使用 5.x 版本 5.30.2、5.31.1、5.32.1、5.33.1 及更高版本，以及 6.x 版本 6.1.1、6.2.1、6.3.1 及更高版本，解決了此問題。如需有關區域和版本可用性的詳細資訊，請參閱 [受管擴展可用性](#emr-managed-scaling-availability)。

## 概觀


使用 Amazon EMR 5.30.0 版及更新版本 (Amazon EMR 6.0.0 除外)，您可以啟用 Amazon EMR 受管擴展功能。受管擴展功能可讓您根據工作負載自動增加或減少叢集中的執行個體或單位數目。Amazon EMR 會持續評估叢集指標以制定擴展決策，針對成本與速度將叢集優化。受管擴展功能可用於由執行個體群組或執行個體機群組成的叢集。

## 受管擴展可用性
可用性
+ 在下文中 AWS 區域，Amazon EMR 受管擴展適用於 Amazon EMR 6.14.0 及更高版本：
  + 亞太區域 (台北) (ap-east-2)
  + 亞太區域 (墨爾本) (ap-southeast-4)
  + 亞太區域 (馬來西亞) (ap-southeast-5)
  + 亞太區域 (紐西蘭) (ap-southeast-6)
  + 亞太區域 (泰國) (ap-southeast-7)
  + 加拿大西部 (卡加利) (ca-west-1)
  + 歐洲 (西班牙) (eu-south-2)
  + 墨西哥 (中部) (mx-central-1)
+ 在下文中 AWS 區域，Amazon EMR 受管擴展適用於 Amazon EMR 5.30.0 和 6.1.0 及更高版本：
  + 美國東部 (維吉尼亞北部) (us-east-1)
  + 美國東部 (俄亥俄) (us-east-2)
  + 美國西部 (奧勒岡) (us-west-2)
  + 美國西部 (加利佛尼亞北部) (us-west-1)
  + 非洲 (開普敦) (af-south-1)
  + 亞太區域 (香港) (ap-east-1)
  + 亞太地區 (孟買) (ap-south-1)
  + 亞太區域 (海德拉巴) (ap-south-2)
  + 亞太地區 (首爾) (ap-northeast-2)
  + 亞太地區 (新加坡) (ap-southeast-1)
  + 亞太地區 (雪梨) (ap-southeast-2)
  + 亞太區域 (雅加達) (ap-southeast-3)
  + 亞太地區 (東京) (ap-northeast-1)
  + 亞太地區 (大阪) (ap-northeast-3)
  + 加拿大 (中部) (ca-central-1)
  + 南美洲 (聖保羅) (sa-east-1)
  + 歐洲 (法蘭克福) (eu-central-1)
  + 歐洲 (蘇黎世) (eu-central-2)
  + 歐洲 (愛爾蘭) (eu-west-1)
  + 歐洲 (倫敦) (eu-west-2)
  + 歐洲 (米蘭) (eu-south-1)
  + 歐洲 (巴黎) (eu-west-3)
  + 歐洲 (斯德哥爾摩) (eu-north-1)
  + 以色列 (特拉維夫) (il-central-1)
  + 中東 (阿拉伯聯合大公國) (me-central-1)
  + 中國 (北京) (cn-north-1)
  + 中國 (寧夏) (cn-northwest-1)
  + AWS GovCloud （美國東部） (us-gov-east-1)
  + AWS GovCloud （美國西部） (us-gov-west-1)
+ Amazon EMR 受管擴展功能僅適用於 YARN 應用程式，例如 Spark、Hadoop、Hive、Flink。它不支援非 YARN 型應用程式，例如 Presto 和 HBase。

## 受管擴展參數
Parameters

必須為受管擴展設定下列參數。這個限制僅適用於核心節點和任務節點。無法在初始設定後擴展主節點。
+ **最小值** (`MinimumCapacityUnits`) - 叢集中允許之 EC2 容量的下限。透過虛擬中央處理單元 (vCPU) 核心或執行個體群組的執行個體進行測量。透過執行個體機群的單位進行測量。
+ **最大值** (`MaximumCapacityUnits`) - 叢集中允許的 EC2 容量的上限。透過虛擬中央處理單元 (vCPU) 核心或執行個體群組的執行個體進行測量。透過執行個體機群的單位進行測量。
+ **隨需限制** (`MaximumOnDemandCapacityUnits`) (選用) - 叢集中隨需市場類型允許的 EC2 容量上限。如果未指定此參數，它預設為 `MaximumCapacityUnits` 的值。
  + 此參數用於分割隨需執行個體和 Spot 執行個體之間的容量配置。例如，如果將最小參數設定為 2 個執行個體，最大參數設定為 100 個執行個體，隨需限制設定為 10 個執行個體，則 Amazon EMR 受管擴展功能最多可擴展 10 個隨需執行個體，並將剩餘容量分配給 Spot 執行個體。如需詳細資訊，請參閱[節點配置案例](managed-scaling-allocation-strategy.md#node-allocation-scenarios)。
+ **核心節點上限** (`MaximumCoreCapacityUnits`) (選用) - 叢集中核心節點類型允許的 EC2 容量的上限。如果未指定此參數，它預設為 `MaximumCapacityUnits` 的值。
  + 此參數用於分割核心節點和任務節點之間的容量配置。例如，如果將最小參數設定為 2 個執行個體，最大參數設定為 100 個執行個體，最大核心節點設定為 17 個執行個體，則 Amazon EMR 受管擴展功能最多可擴展 17 個核心節點，並將剩餘的 83 個執行個體分配給任務節點。如需詳細資訊，請參閱[節點配置案例](managed-scaling-allocation-strategy.md#node-allocation-scenarios)。

如需有關受管擴展參數的詳細資訊，請參閱 [https://docs.aws.amazon.com/emr/latest/APIReference/API_ComputeLimits.html](https://docs.aws.amazon.com/emr/latest/APIReference/API_ComputeLimits.html)。

## Amazon EMR 受管擴展功能的考量
考量事項
+ 有限 AWS 區域 和 Amazon EMR 版本支援受管擴展。如需詳細資訊，請參閱[受管擴展可用性](#emr-managed-scaling-availability)。
+ 必須為 Amazon EMR 受管擴展功能設定必要的參數。如需詳細資訊，請參閱[受管擴展參數](#emr-managed-scaling-parameters)。
+ 若要使用受管擴展，指標收集器程序必須能夠連線到公有 API 端點，以便在 API Gateway 中進行受管擴展。如果您搭配 使用私有 DNS 名稱 Amazon Virtual Private Cloud，受管擴展將無法正常運作。為了確保受管擴展正常運作，建議您採取下列其中一個動作：
  + 從 Amazon VPC 移除 API Gateway 介面 VPC 端點。
  + 遵循[從 VPC 連接至 API Gateway API 時，為什麼會收到 HTTP 403 禁止錯誤？](https://aws.amazon.com/premiumsupport/knowledge-center/api-gateway-vpc-connections/)中的指示進行操作以停用私有 DNS 名稱設定。
  + 改為在私有子網路中啟動叢集。如需詳細資訊，請參閱 [私有子網路](emr-clusters-in-a-vpc.md#emr-vpc-private-subnet) 的主題。
+ 如果您的 YARN 作業在縮減規模過程中間歇性地變慢，而 YARN Resource Manager 日誌顯示在此期間大部分節點被拒絕列出，則您可以調整停用逾時閾值。

  將 `spark.blacklist.decommissioning.timeout` 從一小時縮短到一分鐘，使節點可用於其他擱置中的容器，以繼續任務處理。

  也應該將 `YARN.resourcemanager.nodemanager-graceful-decommission-timeout-secs` 設定為較大的值，以確保 Amazon EMR 不會在節點上執行最長的「Spark 任務」時強制終止節點。目前的預設值為 60 分鐘，這表示當節點進入停用狀態後，YARN 會在 60 分鐘後強制終止容器。

  下列範例 YARN Resource Manager 日誌行顯示新增至停用狀態的節點：

  ```
  2021-10-20 15:55:26,994 INFO org.apache.hadoop.YARN.server.resourcemanager.DefaultAMSProcessor (IPC Server handler 37 on default port 8030): blacklist are updated in Scheduler.blacklistAdditions: [ip-10-10-27-207.us-west-2.compute.internal, ip-10-10-29-216.us-west-2.compute.internal, ip-10-10-31-13.us-west-2.compute.internal, ... , ip-10-10-30-77.us-west-2.compute.internal], blacklistRemovals: []
  ```

  請參閱 [Amazon EMR 如何在停用節點期間與 YARN 拒絕清單整合](https://aws.amazon.com/blogs/big-data/spark-enhancements-for-elasticity-and-resiliency-on-amazon-emr/)、[Amazon EMR 中的節點可能被拒絕列出的案例](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-troubleshoot-error-resource-3.html)，以及[設定 Spark 節點停用行為](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-configure.html#spark-decommissioning)的詳細資訊。
+ 對於 Spark 工作負載，將 Spark 屬性 **spark.dynamicAllocation.enabled** 變更為 以停用 Spark 動態資源分配器 (DRA) `FALSE` 可能會導致受管擴展問題，其中叢集可以擴展超過工作負載所需的範圍 （最高運算）。針對這些工作負載使用 Managed Scaling 時，我們建議您保持啟用 Spark DRA，這是此屬性的預設狀態。
+ EBS 磁碟區過度使用可能會導致受管擴展問題。建議您將 EBS 磁碟區維持在 90% 以下的使用率。如需詳細資訊，請參閱[Amazon EMR 中的執行個體儲存選項和行為](emr-plan-storage.md)。
+ Amazon CloudWatch 指標對於 Amazon EMR 受管擴展功能的操作至關重要。建議您密切監控 Amazon CloudWatch 指標，以確保資料不會遺失。如需有關如何設定 CloudWatch 警示以偵測遺失指標的詳細資訊，請參閱[使用 Amazon CloudWatch 警示](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)。
+ 在未安裝 Presto 的情況下，5.30.0 和 5.30.1 叢集上的受管擴展操作可能會導致應用程式失敗，或致使統一執行個體群組或執行個體機群停留在 `ARRESTED` 狀態，尤其當縮減規模操作緊隨縱向擴展操作之後時。

  解決辦法是，在使用 Amazon EMR 版本 5.30.0 和 5.30.1 建立叢集時，選擇 Presto 作為要安裝的應用程式，即使您的作業不需要用到 Presto。
+ 當您設定 Amazon EMR 受管擴展功能的最大核心節點和隨需限制時，請考慮執行個體群組和執行個體機群之間的差異。每個執行個體包含相同的執行個體類型和適用於以下執行個體的相同購買選項：隨需或 Spot。對於每個執行個體機群，您可以指定最多 5 個執行個體類型，它可以佈建為隨需和 Spot 執行個體。如需詳細資訊，請參閱[使用執行個體機群或統一執行個體群組建立叢集](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-instance-group-configuration.html)、[執行個體機群選項](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-instance-fleet.html#emr-instance-fleet-options)和 [節點配置案例](managed-scaling-allocation-strategy.md#node-allocation-scenarios)。
+ 使用 Amazon EMR 5.30.0 及更高版本時，如果您將主要安全群組的預設**允許所有**傳出規則移除為 0.0.0.0/，則必須新增規則以允許安全群組的傳出 TCP 連線，以便在連接埠 9443 上進行服務存取。用於服務存取的安全群組也必須允許來自主要安全群組的連接埠 9443 上的輸入 TCP 流量。如需有關設定安全群組的詳細資訊，請參閱[適用於主要執行個體的 Amazon EMR 受管安全群組 (私有子網路)](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-man-sec-groups.html#emr-sg-elasticmapreduce-master-private)。
+ 您可以使用 AWS CloudFormation 來設定 Amazon EMR 受管擴展。如需詳細資訊，請參閱《AWS CloudFormation 使用者指南》**中的 [AWS::EMR::Cluster](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html)。
+ 如果您使用的是 Spot 節點，請考慮使用節點標籤，以防止 Amazon EMR 在 Amazon EMR 移除 Spot 節點時移除應用程式程序。如需節點標籤的詳細資訊，請參閱[任務節點](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-master-core-task-nodes.html#emr-plan-task)。
+ Amazon EMR 6.15 版或更低版本預設不支援節點標記。如需詳細資訊，請參閱[了解節點類型：主要節點、核心節點和任務節點。](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-master-core-task-nodes.html)
+ 如果您使用的是 Amazon EMR 6.15 版或更低版本，您只能依節點類型指派節點標籤，例如核心節點和任務節點。不過，如果您使用的是 Amazon EMR 7.0 版或更新版本，您可以依節點類型和市場類型設定節點標籤，例如隨需和 Spot。
+ 如果應用程式程序需求增加，且執行器需求在您將應用程式程序限制為核心節點時減少，您可以在相同的調整大小操作中新增回核心節點並移除任務節點。如需詳細資訊，請參閱[了解節點配置策略和案例](https://docs.aws.amazon.com/emr/latest/ManagementGuide/managed-scaling-allocation-strategy.html)。
+ Amazon EMR 不會標記任務節點，因此您無法將 YARN 屬性設定為僅限制任務節點的應用程式程序。不過，如果您想要使用市場類型做為節點標籤，您可以使用 `ON_DEMAND`或 `SPOT`標籤來放置應用程式程序。不建議將 Spot 節點用於應用程式主要程序。
+ 使用節點標籤時，叢集中的執行中單位總數可暫時超過受管擴展政策中設定的最大運算，同時 Amazon EMR 會解除委任部分執行個體。請求的單位總數一律會保持在或低於政策的最大運算。
+ 受管擴展僅支援節點標籤 `ON_DEMAND`和 `SPOT`或 `CORE`和 `TASK`。不支援自訂節點標籤。
+ Amazon EMR 會在建立叢集和佈建資源時建立節點標籤。當您重新設定叢集時，Amazon EMR 不支援新增節點標籤。您也無法在啟動叢集後設定受管擴展時修改節點標籤。
+ 受管擴展會根據應用程式程序和執行器需求獨立擴展核心節點和任務節點。若要在核心縮減期間避免 HDFS 資料遺失問題，請遵循核心節點的標準實務。若要進一步了解核心節點和 HDFS 複寫的最佳實務，請參閱[考量事項和最佳實務](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-ha-considerations.html)。
+ 您無法將應用程式程序和執行器同時放置在 `core`或 `ON_DEMAND`節點上。如果您想要在其中一個節點上同時新增應用程式程序和執行器，請勿使用 `yarn.node-labels.am.default-node-label-expression`組態。

  例如，若要同時將應用程式程序和執行器放在`ON_DEMAND`節點中，請將最大運算設定為與`ON_DEMAND`節點中的最大值相同。同時移除`yarn.node-labels.am.default-node-label-expression`組態。

  若要在`core`節點上同時新增應用程式程序和執行器，請移除`yarn.node-labels.am.default-node-label-expression`組態。
+  當您搭配節點標籤使用受管擴展時，`yarn.scheduler.capacity.maximum-am-resource-percent: 1`如果您計劃平行執行多個應用程式，請設定 屬性。這樣做可確保您的應用程式程序充分利用可用的 `CORE`或 `ON_DEMAND`節點。
+  如果您使用受管擴展搭配節點標籤，請將 屬性設定為比叢集上最長執行中應用程式更長`yarn.resourcemanager.decommissioning.timeout`的值。這樣做可減少 Amazon EMR 受管呼叫需要重新排程應用程式以重新委任`CORE`或`ON_DEMAND`節點的機會。
+ 為了降低因隨機播放資料遺失而導致應用程式失敗的風險，Amazon EMR 會從叢集收集指標，以判斷具有目前和上一個階段中現有暫時性隨機播放資料的節點。在極少數情況下，指標可以繼續報告已完成或終止的應用程式的過時資料。這可能會影響叢集中執行個體的及時縮減規模。對於具有大量隨機播放資料的叢集，請考慮使用 EMR 6.13 版和更新版本。

## 功能歷史記錄


此資料表列出 Amazon EMR 受管擴展功能的更新。


| 版本日期 | 功能 | Amazon EMR 版本 | 
| --- | --- | --- | 
| 2024 年 11 月 20 日 | 受管擴展適用於il-central-1以色列 （特拉維夫）、me-central-1中東 （阿拉伯聯合大公國） 和ap-northeast-3亞太區域 （大阪） 區域。 | 5.30.0 和 6.1.0 及更高版本 | 
| 2024 年 11 月 15 日 | 受管擴展適用於eu-central-2歐洲 （蘇黎世） 區域。 | 5.30.0 和 6.1.0 及更高版本 | 
| 2024 年 8 月 20 日 | 節點標籤現在可在受管擴展中使用，因此您可以根據市場類型或節點類型來標記執行個體，以改善自動擴展。 | 7.2.0 及更高版本 | 
| 2024 年 3 月 31 日 | 受管擴展適用於ap-south-2亞太區域 （海德拉巴） 區域。 | 6.14.0 及更新版本 | 
| 2024 年 2 月 13 日 | 受管擴展適用於eu-south-2歐洲 （西班牙） 區域。 | 6.14.0 及更新版本 | 
| 2023 年 10 月 10 日 | ap-southeast-3 亞太區域 (雅加達) 可使用受管擴展。 | 6.14.0 及更新版本 | 
| 2023 年 7 月 28 日 | 當 Amazon EMR 在與目前執行個體群組的縱向擴展中遇到延遲時，增強的受管擴展功能可在縱向擴展時切換到不同的任務執行個體群組。 | 5.34.0 版和更新版本、6.4.0 版和更新版本 | 
| 2023 年 6 月 16 日 | 增強了受管擴展功能，可了解執行應用程式主程序的節點，因此不會縮減這些節點。如需詳細資訊，請參閱[了解 Amazon EMR 節點配置策略和案例](managed-scaling-allocation-strategy.md)。 | 5.34.0 版和更新版本、6.4.0 版和更新版本 | 
| 2022 年 3 月 21 日 | 新增了縮減叢集時使用的 Spark 隨機資料感知功能。對於已啟用 Apache Spark 和受管擴展功能的 Amazon EMR 叢集，Amazon EMR 會持續監控 Spark 執行程式和中繼隨機資料位置。使用此資訊，Amazon EMR 只能縮減未充分利用的執行個體，這些執行個體不包含使用中的隨機資料。這可防止重新計算遺失的隨機資料，有助於降低成本並提高作業效能。如需詳細資訊，請參閱 [Spark 程式設計指南](https://spark.apache.org/docs/latest/rdd-programming-guide.html#shuffle-operations)。 | 5.34.0 版和更新版本、6.4.0 版和更新版本 | 

# 設定 Amazon EMR 的受管擴展
設定受管擴展

下列各節說明如何啟動使用受管擴展搭配 適用於 Java 的 AWS SDK AWS 管理主控台、 或 的 EMR 叢集 AWS Command Line Interface。

**Topics**
+ [

## 使用 AWS 管理主控台 設定受管擴展
](#managed-scaling-console)
+ [

## 使用 AWS CLI 設定受管擴展
](#managed-scaling-cli)
+ [

## 使用 適用於 Java 的 AWS SDK 設定受管擴展
](#managed-scaling-sdk)

## 使用 AWS 管理主控台 設定受管擴展
AWS 管理主控台

可以使用 Amazon EMR 主控台在建立叢集時設定受管擴展，或變更執行中叢集的受管擴展政策。

------
#### [ Console ]

**使用主控台建立叢集時設定受管擴展**

1. 登入 AWS 管理主控台，並在 https：//[https://console.aws.amazon.com/emr](https://console.aws.amazon.com/emr) 開啟 Amazon EMR 主控台。

1. 在左側導覽窗格中的 **EMR on EC2** 下方，選擇**叢集**，然後選擇**建立叢集**。

1. 選擇 Amazon EMR 版本 **emr-5.30.0** 或更新版本，**emr-6.0.0** 版本除外。

1. 在**叢集擴展和佈建**選項下，選擇**使用 EMR 受管擴展**。指定執行個體數量的**下限**和**上限**、**核心節點執行個體上限**以及**隨需執行個體上限**。

1. 選擇適用於您的叢集的任何其他選項。

1. 若要啟動您的叢集，請選擇**建立叢集**。

**使用主控台在現有叢集上設定受管擴展**

1. 登入 AWS 管理主控台，並在 https：//[https://console.aws.amazon.com/emr](https://console.aws.amazon.com/emr) 開啟 Amazon EMR 主控台。

1. 在左側導覽窗格中的 **EMR on EC2** 下，選擇**叢集**，然後選取您要更新的叢集。

1. 在叢集詳細資訊頁面的**執行個體**索引標籤中，尋找**執行個體群組設定**區段。選擇**編輯叢集擴展**，指定執行個體數量**下限**和**上限**以及**隨需限制**的新值。

------

## 使用 AWS CLI 設定受管擴展
AWS Command Line Interface

您可以在建立叢集時使用 Amazon EMR AWS CLI 命令來設定受管擴展。可使用速記語法來指定相關命令中內嵌的 JSON 組態，或是以含有組態 JSON 的檔案做為參照。您也可以將受管擴展政策套用至現有叢集，並移除先前套用的受管理擴展政策。此外還能從執行中的叢集上擷取調整規模政策組態的詳細資訊。

**在叢集啟動期間啟用受管擴展**

您可以在叢集啟動期間啟用受管擴展，如下面範例所示。

```
aws emr create-cluster \
 --service-role EMR_DefaultRole \
 --release-label emr-7.12.0 \
 --name EMR_Managed_Scaling_Enabled_Cluster \
 --applications Name=Spark Name=Hbase \
 --ec2-attributes KeyName=keyName,InstanceProfile=EMR_EC2_DefaultRole \
 --instance-groups InstanceType=m4.xlarge,InstanceGroupType=MASTER,InstanceCount=1 InstanceType=m4.xlarge,InstanceGroupType=CORE,InstanceCount=2 \
 --region us-east-1 \
 --managed-scaling-policy ComputeLimits='{MinimumCapacityUnits=2,MaximumCapacityUnits=4,UnitType=Instances}'
```

您也可以指定受管政策設定，要求在使用 `create-cluster` 時，使用管理擴展政策選項 。

**將受管擴展政策套用至現有叢集**

您可以將受管擴展政策套用至現有叢集，如下列範例所示。

```
aws emr put-managed-scaling-policy  
--cluster-id j-123456  
--managed-scaling-policy ComputeLimits='{MinimumCapacityUnits=1,
MaximumCapacityUnits=10,  MaximumOnDemandCapacityUnits=10, UnitType=Instances}'
```

您也可以使用 `aws emr put-managed-scaling-policy` 命令，將受管擴展政策套用至現有叢集。以下範例參考的是 JSON 檔案 `managedscaleconfig.json`，該檔案指定了受管擴展政策的組態。

```
aws emr put-managed-scaling-policy --cluster-id j-123456 --managed-scaling-policy file://./managedscaleconfig.json
```

下列範例中所示的 `managedscaleconfig.json` 檔案，其內容會定義受管擴展政策。

```
{
    "ComputeLimits": {
        "UnitType": "Instances",
        "MinimumCapacityUnits": 1,
        "MaximumCapacityUnits": 10,
        "MaximumOnDemandCapacityUnits": 10
    }
}
```

**擷取受管擴展政策組態**

`GetManagedScalingPolicy` 命令會擷取此政策組態。舉例而言，以下命令會擷取叢集 ID 為 `j-123456` 的叢集的組態。

```
aws emr get-managed-scaling-policy --cluster-id j-123456
```

該命令會產生以下的輸出範例。

```
 1. {
 2.    "ManagedScalingPolicy": { 
 3.       "ComputeLimits": { 
 4.          "MinimumCapacityUnits": 1,
 5.          "MaximumOnDemandCapacityUnits": 10,
 6.          "MaximumCapacityUnits": 10,
 7.          "UnitType": "Instances"
 8.       }
 9.    }
10. }
```

如需在 中使用 Amazon EMR 命令的詳細資訊 AWS CLI，請參閱 [https://docs.aws.amazon.com/cli/latest/reference/emr](https://docs.aws.amazon.com/cli/latest/reference/emr)。

**移除受管擴展政策**

`RemoveManagedScalingPolicy` 命令會移除此政策組態。舉例而言，以下命令會移除叢集 ID 為 `j-123456` 的叢集的組態。

```
aws emr remove-managed-scaling-policy --cluster-id j-123456
```

## 使用 適用於 Java 的 AWS SDK 設定受管擴展
適用於 Java 的 AWS SDK

以下程式摘錄顯示如何使用 適用於 Java 的 AWS SDK設定受管擴展：

```
package com.amazonaws.emr.sample;

import java.util.ArrayList;
import java.util.List;

import com.amazonaws.AmazonClientException;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.elasticmapreduce.AmazonElasticMapReduce;
import com.amazonaws.services.elasticmapreduce.AmazonElasticMapReduceClientBuilder;
import com.amazonaws.services.elasticmapreduce.model.Application;
import com.amazonaws.services.elasticmapreduce.model.ComputeLimits;
import com.amazonaws.services.elasticmapreduce.model.ComputeLimitsUnitType;
import com.amazonaws.services.elasticmapreduce.model.InstanceGroupConfig;
import com.amazonaws.services.elasticmapreduce.model.JobFlowInstancesConfig;
import com.amazonaws.services.elasticmapreduce.model.ManagedScalingPolicy;
import com.amazonaws.services.elasticmapreduce.model.RunJobFlowRequest;
import com.amazonaws.services.elasticmapreduce.model.RunJobFlowResult;

public class CreateClusterWithManagedScalingWithIG {

	public static void main(String[] args) {
		AWSCredentials credentialsFromProfile = getCreadentials("AWS-Profile-Name-Here");
		
		/**
		 * Create an Amazon EMR client with the credentials and region specified in order to create the cluster
		 */
		AmazonElasticMapReduce emr = AmazonElasticMapReduceClientBuilder.standard()
			.withCredentials(new AWSStaticCredentialsProvider(credentialsFromProfile))
			.withRegion(Regions.US_EAST_1)
			.build();
		
		/**
		 * Create Instance Groups - Primary, Core, Task
		 */
		InstanceGroupConfig instanceGroupConfigMaster = new InstanceGroupConfig()
				.withInstanceCount(1)
				.withInstanceRole("MASTER")
				.withInstanceType("m4.large")
				.withMarket("ON_DEMAND"); 
				
		InstanceGroupConfig instanceGroupConfigCore = new InstanceGroupConfig()
			.withInstanceCount(4)
			.withInstanceRole("CORE")
			.withInstanceType("m4.large")
			.withMarket("ON_DEMAND");
			
		InstanceGroupConfig instanceGroupConfigTask = new InstanceGroupConfig()
			.withInstanceCount(5)
			.withInstanceRole("TASK")
			.withInstanceType("m4.large")
			.withMarket("ON_DEMAND");

		List<InstanceGroupConfig> igConfigs = new ArrayList<>();
		igConfigs.add(instanceGroupConfigMaster);
		igConfigs.add(instanceGroupConfigCore);
		igConfigs.add(instanceGroupConfigTask);
		
        /**
         *  specify applications to be installed and configured when Amazon EMR creates the cluster
         */
		Application hive = new Application().withName("Hive");
		Application spark = new Application().withName("Spark");
		Application ganglia = new Application().withName("Ganglia");
		Application zeppelin = new Application().withName("Zeppelin");
		
		/** 
		 * Managed Scaling Configuration - 
         * Using UnitType=Instances for clusters composed of instance groups
		 *
         * Other options are: 
         * UnitType = VCPU ( for clusters composed of instance groups)
         * UnitType = InstanceFleetUnits ( for clusters composed of instance fleets)
         **/
		ComputeLimits computeLimits = new ComputeLimits()
				.withMinimumCapacityUnits(1)
				.withMaximumCapacityUnits(20)
				.withUnitType(ComputeLimitsUnitType.Instances);
		
		ManagedScalingPolicy managedScalingPolicy = new ManagedScalingPolicy();
		managedScalingPolicy.setComputeLimits(computeLimits);
		
		// create the cluster with a managed scaling policy
		RunJobFlowRequest request = new RunJobFlowRequest()
	       		.withName("EMR_Managed_Scaling_TestCluster")
	       		.withReleaseLabel("emr-7.12.0")          // Specifies the version label for the Amazon EMR release; we recommend the latest release
	       		.withApplications(hive,spark,ganglia,zeppelin)
	       		.withLogUri("s3://path/to/my/emr/logs")  // A URI in S3 for log files is required when debugging is enabled.
	       		.withServiceRole("EMR_DefaultRole")      // If you use a custom IAM service role, replace the default role with the custom role.
	       		.withJobFlowRole("EMR_EC2_DefaultRole")  // If you use a custom Amazon EMR role for EC2 instance profile, replace the default role with the custom Amazon EMR role.
	       		.withInstances(new JobFlowInstancesConfig().withInstanceGroups(igConfigs)
	       	   		.withEc2SubnetId("subnet-123456789012345")
	           		.withEc2KeyName("my-ec2-key-name") 
	           		.withKeepJobFlowAliveWhenNoSteps(true))    
	       		.withManagedScalingPolicy(managedScalingPolicy);
	   RunJobFlowResult result = emr.runJobFlow(request); 
	   
	   System.out.println("The cluster ID is " + result.toString());
	}
	
	public static AWSCredentials getCredentials(String profileName) {
		// specifies any named profile in .aws/credentials as the credentials provider
		try {
			return new ProfileCredentialsProvider("AWS-Profile-Name-Here")
					.getCredentials(); 
        } catch (Exception e) {
            throw new AmazonClientException(
                    "Cannot load credentials from .aws/credentials file. " +
                    "Make sure that the credentials file exists and that the profile name is defined within it.",
                    e);
        }
	}
	
	public CreateClusterWithManagedScalingWithIG() { }
}
```

# Amazon EMR 的進階擴展
適用於 EMR 的進階擴展

從 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)。

## 進階擴展設定
進階擴展設定

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

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

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

## 進階擴展的優點
進階擴展的優點

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

## 最佳化入門
最佳化入門

**設定和組態**

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

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)


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

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

# 了解 Amazon EMR 節點配置策略和案例
節點配置策略

本章節提供節點分配策略和常見擴展案例的概觀，可以與 Amazon EMR 受管擴展功能搭配使用。

## 節點配置策略


Amazon EMR 受管擴展功能可根據下列縱向擴展和縮減規模策略來分配核心節點和任務節點：

**縱向擴展策略**
+ 對於 Amazon EMR 7.2 版和更新版本，受管擴展會先根據節點標籤和應用程式程序限制 YARN 屬性新增節點。
+ 對於 Amazon EMR 7.2 版及更高版本，如果您啟用節點標籤並將應用程式程序限制為`CORE`節點，Amazon EMR 受管擴展會在應用程式程序需求增加且執行器需求增加時擴展核心節點和任務節點。同樣地，如果您啟用節點標籤並將應用程式程序限制為`ON_DEMAND`節點，受管擴展會在應用程式程序需求增加時擴展隨需節點，並在執行器需求增加時擴展 Spot 節點。
+ 如果未啟用節點標籤，則應用程式程序置放不會受限於任何節點或市場類型。
+ 透過使用節點標籤，受管擴展可以在相同的調整大小操作中擴展和縮減不同的執行個體群組和執行個體機群。例如，在 `instance_group1` 具有`ON_DEMAND`節點且`instance_group2`具有`SPOT`節點的情況下，會啟用節點標籤，且應用程式程序僅限於具有`ON_DEMAND`標籤的節點。`instance_group2` 如果應用程式程序需求減少`instance_group1`且執行器需求增加，受管擴展會縮減和擴展。
+ 當 Amazon EMR 在與目前執行個體群組的縱向擴展中遇到延遲時，使用受管擴展功能的叢集可自動切換到不同的任務執行個體群組。
+ 如果已設定 `MaximumCoreCapacityUnits` 參數，Amazon EMR 會擴展核心節點，直到核心單元達到允許的上限為止。所有剩餘容量都會新增至任務節點。
+ 如果已設定 `MaximumOnDemandCapacityUnits` 參數，Amazon EMR 會使用隨需執行個體來擴展叢集，直到隨需單位達到允許的上限為止。使用 Spot 執行個體新增所有剩餘容量。
+ 如果同時設定了 `MaximumCoreCapacityUnits` 和 `MaximumOnDemandCapacityUnits` 參數，Amazon EMR 會在擴展期間考慮這兩個限制。

  例如，如果 `MaximumCoreCapacityUnits` 小於 `MaximumOnDemandCapacityUnits`，Amazon EMR 會先擴展核心節點，直到達到核心容量限制為止。對於剩餘容量，Amazon EMR 首先使用隨需執行個體來擴展任務節點，直到達到隨需限制為止，然後將 Spot 執行個體用於任務節點。

**縮減規模策略**
+ 與擴展策略類似，Amazon EMR 會根據節點標籤移除節點。如需節點標籤的詳細資訊，請參閱[了解節點類型：主要節點、核心節點和任務節點](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-master-core-task-nodes.html)。
+ 如果您尚未啟用節點標籤，受管擴展會移除任務節點，然後移除核心節點，直到達到所需的縮減目標容量為止。受管擴展絕不會將叢集縮減到低於受管擴展政策中指定的最低限制。
+ Amazon EMR 5.34.0 版和更新版本，以及 Amazon EMR 6.4.0 版和更新版本，支援 Spark 隨機播放資料意識，可防止執行個體在 Managed Scaling 知道現有隨機播放資料時縮減。如需有關隨機排序操作的詳細資訊，請參閱[《Spark 程式設計指南》](https://spark.apache.org/docs/latest/rdd-programming-guide.html#shuffle-operations)。Managed Scaling 會盡力防止縮減任何作用中 Spark 應用程式目前和上一個階段的隨機播放資料節點，最長可達 30 分鐘。這有助於將意外隨機資料遺失降至最低，避免需要重新嘗試任務和重新計算中繼資料。不過，無法保證能夠防止隨機資料遺失。為了改善 Spark 隨機播放保護，我們建議對發行標籤為 7.4 或更新版本的叢集使用隨機播放意識。將下列旗標新增至叢集組態，以啟用改善的 Spark 隨機播放保護。
  + 如果`yarn.nodemanager.shuffledata-monitor.interval-ms`標記 （預設 30000 毫秒） 或 `spark.dynamicAllocation.executorIdleTimeout`（預設 60 秒） 已從預設值變更，請更新必要的標記`true`以確保條件`spark.dynamicAllocation.executorIdleTimeout > yarn.nodemanager.shuffledata-monitor.interval-ms`保持不變。

    ```
    [
    	{
    		"Classification": "yarn-site",
    		"Properties": { 
    		"yarn.resourcemanager.decommissioning-nodes-watcher.wait-for-shuffle-data": "true"
    		}
    	},
    	{
    		"Classification": "spark-defaults",
    		"Properties": {
    		"spark.dynamicAllocation.enabled": "true",
    		"spark.shuffle.service.removeShuffle": "true"
    		}
    	}
    ]
    ```
+ 受管擴展會先移除任務節點，然後移除核心節點，直到達到所需的縮減目標容量為止。叢集的擴展絕不會低於受管擴展政策中指定的最低限制。
+ 對於使用 Amazon EMR 5.x 5.34.0 版和更新版本以及 6.x 6.4.0 版和更新版本啟動的叢集，如果在其上執行的應用程式中有作用中階段，Amazon EMR Managed Scaling 不會縮減具有`ApplicationMaster`適用於 Apache Spark 的節點。這樣可以最大限度地減少作業失敗和重試，有助於提高作業績效並降低成本。若要確認叢集中的哪些節點正在執行 `ApplicationMaster`，請造訪 Spark 歷史記錄伺服器，並在 Spark 應用程式 ID 的**執行程式**索引標籤下篩選驅動程式。
+ 雖然使用 EMR Managed Scaling 的智慧型擴展可將 Spark 的隨機播放資料遺失降至最低，但在某些情況下，暫時隨機播放資料可能無法在縮減期間受到保護。若要在縮減規模期間提供隨機播放資料的增強彈性，建議您在 YARN 中**為隨機播放資料啟用 Graceful Decommissioning**。在 YARN 中啟用**緩和停用隨機播放資料**時，選取縮減規模且具有隨機播放資料的節點將進入**取消委任**狀態，並繼續提供隨機播放檔案。YARN ResourceManager 會等到節點報告不存在隨機播放檔案，再從叢集中移除節點。
  + Amazon EMR 6.11.0 版及更高版本支援 Tez 和 MapReduce Shuffle Handler 的 **Hive** 隨機播放資料以 Yarn 為基礎的優雅解除委任。
    + 將 `yarn.resourcemanager.decommissioning-nodes-watcher.wait-for-shuffle-data`設定為 ，以啟用隨機資料的一般除役`true`。
  + 啟用外部隨機播放服務時 （在 EC2 上的 EMR 中預設為啟用），Amazon EMR 7.4.0 版和更新版本支援以 Yarn 為基礎的 Spark 隨機播放資料正常停用。
    + 在 Yarn 上執行 Spark 時，Spark 外部隨機播放服務的預設行為是讓 Yarn NodeManager 在應用程式終止時移除應用程式隨機播放檔案。這可能會影響節點停用和運算使用率的速度。對於長時間執行的應用程式，請考慮`spark.shuffle.service.removeShuffle`將 設定為 `true`以移除不再使用的隨機播放檔案，以更快速地停用沒有作用中隨機播放資料的節點。
  + 若要將 Amazon EMR 7.4.0 版和更新版本中的 Spark 隨機播放資料遺失降至最低，請考慮設定下列旗標。
    + 如果`yarn.nodemanager.shuffledata-monitor.interval-ms`標記 （預設 30000 毫秒） 或 `spark.dynamicAllocation.executorIdleTimeout`（預設 60 秒） 已從預設值變更，`true`請更新必要的標記來確保條件`spark.dynamicAllocation.executorIdleTimeout > yarn.nodemanager.shuffledata-monitor.interval-ms`仍然存在。

      ```
      [
      	{
      		"Classification": "yarn-site",
      		"Properties": { 
      		"yarn.resourcemanager.decommissioning-nodes-watcher.wait-for-shuffle-data": "true"
      		}
      	},
      	{
      		"Classification": "spark-defaults",
      		"Properties": {
      		"spark.dynamicAllocation.enabled": "true",
      		"spark.shuffle.service.removeShuffle": "true"
      		}
      	}
      ]
      ```

如果叢集沒有任何負載，則 Amazon EMR 會取消先前評估中新增的執行個體，並執行縮減規模操作。如果叢集負載過重，則 Amazon EMR 會取消移除執行個體並執行縱向擴展操作。

## 節點分配考量


建議您針對核心節點使用隨需購買選項，避免在 Spot 回收時遺失 HDFS 資料。可以針對作業節點使用 Spot 購買選項來降低成本，並在將更多 Spot 執行個體新增至作業節點時獲得更快的作業執行速度。

## 節點配置案例


透過設定不同組合中的上限、下限、隨需限制以及核心節點參數上限，根據您的需求建立各種擴展案例。

**案例 1：僅擴展核心節點**

若僅擴展核心節點，受管擴展參數必須符合下列要求：
+ 隨需限制等於最大邊界。
+ 最大核心節點等於最大邊界。

如果未指定隨需限制和最大核心節點參數，則兩個參數都會預設為最大邊界。

如果您使用受管擴展搭配節點標籤，並將應用程式程序限制為僅在`CORE`節點上執行，則不適用此案例，因為受管擴展會擴展任務節點以滿足執行器需求。

下列範例僅示範擴展核心節點的案例。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ManagementGuide/managed-scaling-allocation-strategy.html)

**案例 2：僅擴展任務節點**

若僅擴展任務節點，受管擴展參數必須符合下列要求：
+ 最大核心節點必須等於最小邊界。

下列範例僅示範擴展任務節點的案例。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ManagementGuide/managed-scaling-allocation-strategy.html)

**案例 3：僅叢集中的隨需執行個體**

若要僅擁有隨需執行個體，叢集和受管擴展參數必須符合下列要求：
+ 隨需限制等於最大邊界。

  如果未指定隨需限制，參數值會預設為最大邊界。預設值表示 Amazon EMR 僅擴展隨需執行個體。

如果最大核心節點小於最大界限，則可以使用最大核心節點參數來分割核心節點和任務節點之間的容量配置。

若要在由執行個體群組構成的叢集中啟用此案例，叢集中的所有節點群組都必須在初始設定期間使用隨需市場類型。

如果您使用受管擴展搭配節點標籤，並將應用程式程序限制為僅在`ON_DEMAND`節點上執行，則不適用此案例，因為受管擴展會擴展`Spot`節點以滿足執行器需求。

下列範例示範在整個叢集中擁有隨需執行個體的案例。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ManagementGuide/managed-scaling-allocation-strategy.html)

**案例 4：叢集中只有 Spot 執行個體**

若要僅擁有 Spot 執行個體，受管擴展參數必須符合下列要求：
+ 隨需限制設定為 0。

如果最大核心節點小於最大界限，則可以使用最大核心節點參數來分割核心節點和任務節點之間的容量配置。

若要在由執行個體群組構成的叢集中啟用此案例，核心執行個體群組必須在初始組態設定期間使用 Spot 購買選項。如果任務執行個體群組中沒有 Spot 執行個體，Amazon EMR 受管擴展功能可在需要時使用 Spot 執行個體建立任務群組。

如果您使用受管擴展搭配節點標籤，並將應用程式程序限制為僅在`ON_DEMAND`節點上執行，則不適用此案例，因為受管擴展會擴展`ON_DEMAND`節點以因應應用程式程序需求。

下列範例示範在整個叢集中擁有 Spot 執行個體的案例。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ManagementGuide/managed-scaling-allocation-strategy.html)

**案例 5：擴展核心節點上的隨需執行個體和任務節點上的 Spot 執行個體**

若要擴展核心節點上的隨需執行個體和任務節點上的 Spot 執行個體，受管擴展參數必須符合下列要求：
+ 隨需限制必須等於最大核心節點。
+ 隨需限制和最大核心節點都必須小於最大界限。

若要在由執行個體群組構成的叢集中啟用此案例，核心節點群組必須使用隨需購買選項。

如果您使用受管擴展搭配節點標籤，並將應用程式程序限制為僅在`ON_DEMAND`節點上執行，則不適用此案例`CORE`。

下列範例示範擴展核心節點上的隨需執行個體和任務節點上的 Spot 執行個體的案例。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ManagementGuide/managed-scaling-allocation-strategy.html)

**案例 6：擴展`CORE`適用於應用程式程序需求的執行個體，以及適用於執行器需求的`TASK`執行個體。**

只有在您使用受管擴展搭配節點標籤，並將應用程式程序限制為僅在`CORE`節點上執行時，此案例才適用。

若要根據應用程式程序需求擴展`CORE`節點，並根據執行器需求擴展`TASK`節點，您必須在叢集啟動時設定下列組態：
+  `yarn.node-labels.enabled:true` 
+  `yarn.node-labels.am.default-node-label-expression: 'CORE'` 

如果您未指定`ON_DEMAND`限制和最大`CORE`節點參數，這兩個參數都會預設為最大邊界。

如果最大`ON_DEMAND`節點小於最大界限，受管擴展會使用最大`ON_DEMAND`節點參數來分割 `ON_DEMAND`和 `SPOT` 節點之間的容量分配。如果您將最大`CORE`節點參數設定為小於或等於最小容量參數，則`CORE`節點會保持靜態為最大核心容量。

下列範例示範根據應用程式程序需求擴展 CORE 執行個體，以及根據執行器需求擴展 TASK 執行個體的情況。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ManagementGuide/managed-scaling-allocation-strategy.html)

**案例 7：擴展`ON_DEMAND`適用於應用程式程序需求的執行個體，以及適用於執行器需求的`SPOT`執行個體。**

只有當您使用受管擴展搭配節點標籤，並將應用程式程序限制為僅在`ON_DEMAND`節點上執行時，此案例才適用。

若要根據應用程式程序需求擴展`ON_DEMAND`節點，並根據執行器需求擴展`SPOT`節點，您必須在叢集啟動時設定下列組態：
+  `yarn.node-labels.enabled:true` 
+  `yarn.node-labels.am.default-node-label-expression: 'ON_DEMAND'` 

如果您未指定`ON_DEMAND`限制和最大`CORE`節點參數，這兩個參數都會預設為最大邊界。

如果最大`CORE`節點小於最大界限，受管擴展會使用最大`CORE`節點參數來分割 `CORE`和 `TASK` 節點之間的容量分配。如果您將最大`CORE`節點參數設定為小於或等於最小容量參數，則`CORE`節點會保持靜態為最大核心容量。

下列範例示範根據應用程式程序需求擴展隨需執行個體，以及根據執行器需求擴展 Spot 執行個體的情況。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ManagementGuide/managed-scaling-allocation-strategy.html)

# 了解 Amazon EMR 中的受管擴展指標
受管擴展指標

如果為叢集啟用受管擴展，Amazon EMR 會以一分鐘的精細度發布高解析度指標資料。可以使用 Amazon EMR 主控台或 Amazon CloudWatch 主控台，檢視受管擴展功能控制的每個調整大小初始化和完成操作的事件。CloudWatch 指標對於 Amazon EMR 受管擴展功能的操作至關重要。建議您密切監控 CloudWatch 指標，以確保資料不會遺失。如需有關如何設定 CloudWatch 警示以偵測遺失指標的詳細資訊，請參閱[使用 Amazon CloudWatch 警示](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)。如需有關搭配使用 CloudWatch 事件與 Amazon EMR 的詳細資訊，請參閱[監控 CloudWatch 事件](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-manage-cloudwatch-events.html)。

下列指標可指出叢集的目前或目標容量。只有在啟用受管擴展時，才能使用這些指標。對於由執行個體機群組成的叢集，叢集容量指標會搭配 `Units` 測量。對於由執行個體群組組成的叢集，叢集容量指標則搭配 `Nodes` 或 `vCPU`，根據受管擴展原則中使用的單位類型為單位進行測量。


| 指標 | Description | 
| --- | --- | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ManagementGuide/managed-scaling-metrics.html)  |  叢集中單位/節點/vCPU 的目標總數，由受管擴展判定。 單位：*計數*  | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ManagementGuide/managed-scaling-metrics.html)  |  執行中執行個體內的目前可用單位/節點/vCPU 總數。叢集如被要求調整大小，則在此叢集加入新執行個體或移除執行個體之後，此指標將隨之更新。 單位：*計數*  | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ManagementGuide/managed-scaling-metrics.html)  |  叢集中 CORE 單位/節點/vCPU 的目標數，由受管擴展判定。 單位：*計數*  | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ManagementGuide/managed-scaling-metrics.html)  |  叢集中正在執行的 CORE 單位/節點/vCPU 的目前數目。 單位：*計數*  | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ManagementGuide/managed-scaling-metrics.html)  |  叢集中 TASK 單位/節點/vCPU 的目標數，由受管擴展判定。 單位：*計數*  | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ManagementGuide/managed-scaling-metrics.html)  |  叢集中正在執行的 TASK 單位/節點/vCPU 的目前數目。 單位：*計數*  | 

下列指標會指出叢集和應用程式的使用狀態。這些指標可用於所有 Amazon EMR 功能，但是在啟用叢集的受管擴展時，將以較高的資料解析度和一分鐘的精細度發布指標。您可以將下列指標關聯至前述表格中的叢集容量指標，以瞭解受管擴展決策。


| 指標 | Description | 
| --- | --- | 
|  `AppsCompleted`  |  提交給已完成 YARN 的應用程式數目。 使用案例：監控叢集進度 單位：*計數*  | 
|  `AppsPending`  |  提交給處於擱置中狀態之 YARN 的應用程式數目。 使用案例：監控叢集進度 單位：*計數*  | 
|  `AppsRunning`  |  提交給執行中 YARN 的應用程式數目。 使用案例：監控叢集進度 單位：*計數*  | 
| ContainerAllocated |  ResourceManager 所配置的資源容器數目。 使用案例：監控叢集進度 單位：*計數*  | 
|  `ContainerPending`  |  佇列中尚未配置的容器數目。 使用案例：監控叢集進度 單位：*計數*  | 
| ContainerPendingRatio |  擱置中容器與已配置容器的比率 (ContainerPendingRatio = ContainerPending / ContainerAllocated)。如果 ContainerAllocated = 0，則 ContainerPendingRatio = ContainerPending。ContainerPendingRatio 的值代表數字，而不是百分比。此值適用於根據容器配置行為來調整叢集資源。 單位：*計數*  | 
|  `HDFSUtilization`  |  目前使用中 HDFS 儲存體百分比。 使用案例：分析叢集效能 單位：百分比**  | 
|  `IsIdle`  |  指出叢集不再執行工作，但仍然處於作用中狀態並會產生費用。如果未執行任何任務，而且未執行任何工作，則會設為 1，否則設為 0。每隔五分鐘檢查一次此值，值 1 表示叢集只在檢查時為閒置狀態，而不是整個五分鐘都閒置。為了避免誤判，此值已為 1 且持續多個連續 5 分鐘檢查時，您應該發出警示。例如，如果此值已為 1 且持續 30 分鐘 (含) 以上，則您可以對此值發出警示。 使用案例：監控叢集效能 單位：*布林值*  | 
|  `MemoryAvailableMB`  |  可供配置的記憶體數量。 使用案例：監控叢集進度 單位：*計數*  | 
|  `MRActiveNodes`  |  目前執行 MapReduce 任務或工作的節點數目。相當於 YARN 指標 `mapred.resourcemanager.NoOfActiveNodes`。 使用案例：監控叢集進度 單位：*計數*  | 
|  `YARNMemoryAvailablePercentage`  |  可供 YARN 使用的剩餘記憶體百分比 (YARNMemoryAvailablePercentage = MemoryAvailableMB / MemoryTotalMB)。此值適用於根據 YARN 記憶體用量來調整叢集資源。 單位：百分比**  | 

下列指標提供 YARN 容器和節點使用的資源相關資訊。來自 YARN 資源管理員的這些指標可讓您深入了解叢集中執行的容器和節點所使用的資源。將這些指標與上一個資料表的叢集容量指標進行比較，可以更清楚地了解受管擴展的影響：


| 指標 | 關聯的版本 | Description | 
| --- | --- | --- | 
|  `YarnContainersUsedMemoryGBSeconds`  |  可用於發行標籤 7.3.0 和更新版本  |  發佈期間的耗用容器記憶體 \$1 秒。 **單位：**GB \$1 秒  | 
|  `YarnContainersTotalMemoryGBSeconds`  |  可用於發行標籤 7.3.0 和更新版本  |  發佈期間的毛線容器總數 \$1 秒。 **單位：**GB \$1 秒  | 
|  `YarnContainersUsedVCPUSeconds`  |  可用於發行標籤 7.5.0 及更高版本  |  發佈期間的耗用容器 VCPU \$1 秒。 **單位：**VCPU \$1 秒  | 
| `YarnContainersTotalVCPUSeconds` | 可用於發行標籤 7.5.0 及更高版本 |  發佈期間的總容器 VCPU \$1 秒。 **單位：**VCPU \$1 秒  | 
|  `YarnNodesUsedMemoryGBSeconds`  |  可用於發行標籤 7.5.0 及更高版本  |  發佈期間的耗用節點記憶體 \$1 秒。 **單位：**GB \$1 秒  | 
| `YarnNodesTotalMemoryGBSeconds` | 可用於發行標籤 7.5.0 及更高版本 |  發佈期間的總節點記憶體 \$1 秒。 **單位：**GB \$1 秒  | 
|  `YarnNodesUsedVCPUSeconds`  |  可用於發行標籤 7.3.0 和更新版本  |  發佈期間的耗用節點 VCPU \$1 秒。 **單位：**VCPU \$1 秒  | 
|  `YarnNodesTotalVCPUSeconds`  |  可用於發行標籤 7.3.0 和更新版本  |  發佈期間的總節點 VCPU \$1 秒。 **單位：**VCPU \$1 秒  | 

## 繪製受管擴展指標圖形


您可以繪製指標圖形，以視覺化方式呈現叢集的工作負載模式以及 Amazon EMR 受管擴展功能所做的對應擴展決策，如下列步驟所示。

**在 CloudWatch 主控台中繪製受管擴展指標圖形**

1. 開啟 [CloudWatch 主控台](https://console.aws.amazon.com/cloudwatch/)。

1. 在導覽窗格中，選擇 **Amazon EMR**。您可以在叢集搜尋叢集識別符以進行監控。

1. 向下捲動到指標以製作圖形。開啟一個指標以顯示圖形。

1. 若要將一或多個指標圖形化，請選取各個指標旁的核取方塊。

下列範例說明叢集的 Amazon EMR 受管擴展活動。此圖形顯示的三個自動向下擴展期間，可在工作負載較少時節省成本。

![\[繪製受管擴展指標圖形\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ManagementGuide/images/Managed_Scaling_Decision.png)


所有叢集容量和使用量指標都會以一分鐘的間隔發佈。其他統計資訊也已關聯至每一分鐘資料，且可供您執行各種功能，例如 `Percentiles`、`Min`、`Max`、`Sum`、`Average`、`SampleCount`。

例如，下面圖形會以不同的百分位數繪製相同的 `YARNMemoryAvailablePercentage` 指標，這些百分位數分別是 P10、P50、P90、P99，以及 `Sum`、`Average`、`Min`、`SampleCount`。

![\[以不同百分位數繪製受管擴展指標\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ManagementGuide/images/Managed_Scaling_Metrics.png)


# 使用自動擴展搭配 Amazon EMR 中執行個體群組的自訂政策
使用自訂政策進行自動擴展

在 Amazon EMR 4.0 及更高版本中，使用自訂政策進行自動擴展，可讓您根據 CloudWatch 指標或您在*擴展政策*中所指定的其他參數，以程式設計方式橫向擴展或縮減核心節點和任務節點。自動擴展和自訂政策，可搭配執行個體群組設定，但在使用執行個體機群時不能搭配使用。如需執行個體群組和執行個體機群的詳細資訊，請參閱 [使用執行個體機群或統一執行個體群組建立 Amazon EMR 叢集](emr-instance-group-configuration.md)。

**注意**  
若要在 Amazon EMR 中搭配使用自動擴展與自訂政策功能，必須在建立叢集時將 `VisibleToAllUsers` 參數設定為 `true`。如需詳細資訊，請參閱 [SetVisibleToAllUsers](https://docs.aws.amazon.com/emr/latest/APIReference/API_SetVisibleToAllUsers.html)。

擴展政策屬於執行個體群組設定的一部分。您可以在初次設定執行個體群組時指定政策，或是修改既有叢集中的執行個體群組，即使執行個體群組處於使用中的狀態也無妨。除了主要執行個體群組外，叢集中的每個執行個體群組均擁有自己的擴展政策，包含橫向擴展和縮減規則。橫向擴充和縮減的規則可分開設定，每項規則均有不同的參數。

您可以使用 AWS 管理主控台、 AWS CLI或 Amazon EMR API 設定擴展政策。當您使用 AWS CLI 或 Amazon EMR API 時，請以 JSON 格式指定擴展政策。此外，使用 AWS CLI 或 Amazon EMR API 時，您可以指定自訂 CloudWatch 指標。使用 AWS 管理主控台時無法選取自訂指標。初次使用主控台建立擴展政策時，系統會預先設定好多數應用程式適用的預設政策，以協助您開始使用。這些預設規則均可刪除或修改。

即使自動調整規模可在不停機的狀態下調整 EMR 叢集容量，仍應考量基準工作負載需求並妥善規劃您的節點和執行個體群組設定。如需詳細資訊，請參閱[叢集組態指導方針](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-instances-guidelines.html)。

**注意**  
對於大多數的工作負載而言，最好橫向縮減和橫向擴充兩方規則均要設定，以達到最佳的資源使用效果。若設定規則時少了其中一項，即代表必須在擴展活動後再手動重新調整執行個體的數量。換言之，如此設定的是「單向」的自動橫向擴展或縮減政策，且需手動重新設定。

## 建立 IAM 角色進行自動擴展


Amazon EMR 中的自動縮減需要具有許可的 IAM 角色，方可在觸發擴展活動時新增和終止執行個體。預設角色 `EMR_AutoScaling_DefaultRole` 已設定好合適的角色政策和信任政策，可用於此目的。當您第一次使用 建立具有擴展政策的叢集時 AWS 管理主控台，Amazon EMR 會建立預設角色，並連接許可的預設受管政策 `AmazonElasticMapReduceforAutoScalingRole`。

當您使用 建立具有自動擴展政策的叢集時 AWS CLI，您必須先確保預設 IAM 角色存在，或具有附加政策的自訂 IAM 角色，以提供適當的許可。若要建立預設角色，可在建立叢集前先執行 `create-default-roles` 命令。也可以在建立叢集時指定 `--auto-scaling-role EMR_AutoScaling_DefaultRole` 選項。或者可以建議自訂的自動調整規模角色，再於建立叢集時指定該角色，例如 `--auto-scaling-role MyEMRAutoScalingRole`。若您為 Amazon EMR 建立自訂自動擴展角色，建議您根據受管政策為自訂角色建立基本許可政策。如需詳細資訊，請參閱[設定服務和資源的 Amazon EMR 許可的 IAM AWS 服務角色](emr-iam-roles.md)。

## 了解自動擴展規則


當橫向擴展規則觸發執行個體群組的擴展活動時，會根據您的規則，將 Amazon EC2 執行個體新增至執行個體群組。Amazon EC2 執行個體進入 `InService` 狀態後，Apache Spark、Apache Hive 和 Presto 這類應用程式即可使用新節點。您也可以設定縮減規則來終止執行個體並移除節點。如需有關可自動擴展的 Amazon EC2 執行個體的生命週期詳細資訊，請參閱《Amazon EC2 Auto Scaling 使用者指南》**中的 [Auto Scaling 生命週期](https://docs.aws.amazon.com/autoscaling/ec2/userguide/AutoScalingGroupLifecycle.html)。

可以設定叢集終止 Amazon EC2 執行個體的方式。可選擇要在 Amazon EC2 執行個體每小時計價的範圍內終止執行個體，還是在任務完成時再終止。此設定會套用至自動調整規模和手動重新調整兩邊的操作上。如需此組態的詳細資訊，請參閱「[Amazon EMR 叢集的叢集縮減選項](emr-scaledown-behavior.md)」。

以下是政策中每條規則用於決定自動調整規模行為的參數。

**注意**  
此處列出的參數是以 Amazon EMR AWS 管理主控台 的 為基礎。當您使用 AWS CLI 或 Amazon EMR API 時，可以使用其他進階組態選項。如需進階選項的詳細資訊，請參閱《Amazon EMR API 參考》**中的 [SimpleScalingPolicyConfiguration](https://docs.aws.amazon.com/ElasticMapReduce/latest/API/API_PutAutoScalingPolicy.html)。
+ 執行個體上限與執行個體下限。**執行個體上限**限制可指定執行個體群組中存在的 Amazon EC2 執行個體的最大數量，並且會套用至所有橫向擴展規則。同樣地，**執行個體下限**限制可指定 Amazon EC2 執行個體的最小數量，並可套用至所有縮減規則。
+ **Rule name (規則名稱)**，在政策內必須是唯一的。
+ **scaling adjustment (規模調整)** 會決定受到規則觸發的擴展活動所要新增 (向外擴展規則) 或終止 (向內擴展規則) 的 EC2 執行個體數量。
+ **CloudWatch metric (CloudWatch 指標)**，用於監看警示條件。
+ **comparison operator (比較運算子)**，用於將 CloudWatch 指標與 **Threshold (閾值)** 的值進行比較，判定觸發的條件。
+ **evaluation period (評估時間)**，以五分鐘為單位遞增，CloudWatch 指標必須在此段時間內處於觸發條件之下，才會觸發擴展活動。
+ **Cooldown period (冷卻時間)** 會決定在某條規則觸發擴展活動後，需經過多久才可開始下一次的觸發活動，不論活動是由哪一條規則觸發。當執行個體群組結束擴展活動，且達到了後期擴展狀態，冷卻時間會提供機會給可能觸發後續擴展活動的 CloudWatch 指標，以使之穩定。如需詳細資訊，請參閱《Amazon EC2 Auto Scaling 使用者指南》**中的 [Auto Scaling 冷卻](https://docs.aws.amazon.com/autoscaling/ec2/userguide/Cooldown.html)。  
![\[AWS 管理主控台 Amazon EMR 的自動擴展規則參數。\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ManagementGuide/images/auto-scaling-rule-params.png)

## 考量和限制

+ Amazon CloudWatch 指標對於 Amazon EMR 自動擴展功能的操作至關重要。建議您密切監控 Amazon CloudWatch 指標，以確保資料不會遺失。如需有關如何設定 Amazon CloudWatch 警示以偵測遺失指標的詳細資訊，請參閱[使用 Amazon CloudWatch 警示](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)。
+ EBS 磁碟區過度使用可能會導致受管擴展問題。建議密切監控 EBS 磁碟區的使用情況，以確保 EBS 磁碟區使用率低於 90%。如需有關指定其他 EBS 磁碟區的資訊，請參閱[執行個體儲存體](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-storage.html)。
+ 在 Amazon EMR 5.18 至 5.28 版中使用自訂政策進行自動擴展，可能會因為 Amazon CloudWatch 指標中的資料間歇性遺失而導致擴展失敗。建議使用 Amazon EMR 最新版本來改善自動擴展。如果需要使用 5.18 到 5.28 之間的 Amazon EMR 版本，也可以聯絡 [AWS Support](https://aws.amazon.com/premiumsupport/) 以取得修補程式。

## 使用 AWS 管理主控台 設定自動擴展


當您建立叢集時，可使用進階叢集設定選項來設定執行個體群組的擴展政策。您也可以在既有叢集的 **Hardware (硬體)** 設定中修改執行個體群組，藉此建立或修改服務中的執行個體群組的擴展政策。

1. 導覽至新的 Amazon EMR 主控台，然後從側邊導覽選取**切換至舊主控台**。如需有關切換至舊主控台時預期情況的詳細資訊，請參閱[使用舊主控台](https://docs.aws.amazon.com/emr/latest/ManagementGuide/whats-new-in-console.html#console-opt-in)。

1. 若您是要建立叢集，請在 Amazon EMR 主控台中選取**建立叢集**，再選取**前往進階選項**，選擇**步驟 1：軟體和步驟**的選項，然後前往**步驟 2：硬體組態**。

   ** - 或 - **

   若您要修改執行中叢集內的執行個體群組，請在叢集清單中選取您的叢集，再展開 **Hardware (硬體)** 區段。

1. 在**叢集擴展和佈建選項**區段中，選取**啟用叢集擴展**。然後選取 **Create a custom automatic scaling policy (建立自訂自動擴展政策)**。

   在 **Custom automatic scaling policies (自訂自動擴展政策)** 表格中，按一下出現在所要設定執行個體群組資料列中的鉛筆圖示。「Auto Scaling 規則」畫面開啟。

1. 請輸入您希望執行個體群組在向外擴展完畢後的 **Maximum instances (執行個體上限)**，以及在向內擴展後的 **Minimum instances (執行個體下限)**。

1. 請按一下鉛筆圖示以編輯規則參數，按一下 **X** 可從政策中移除該條規則，按一下 **Add rule (新增規則)** 則可增加更多規則。

1. 按本主題之前的說明，選擇規則參數。如需 Amazon EMR 的可用 CloudWatch 指標的說明，請參閱《Amazon CloudWatch 使用者指南》**中的 [Amazon EMR 指標和維度](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/emr-metricscollected.html)。

## 使用 AWS CLI 設定自動擴展


您可以在建立叢集和建立執行個體群組時，使用 Amazon EMR 的 AWS CLI 命令來設定自動擴展。可使用速記語法來指定相關命令中內嵌的 JSON 組態，或是以含有組態 JSON 的檔案做為參照。您也可以將自動調整規模的政策套用到既有的執行個體群組上，並移除先前套用的自動調整規模政策。此外還能從執行中的叢集上擷取調整規模政策組態的詳細資訊。

**重要**  
建立具有自動擴展政策的叢集時，必須使用 `--auto-scaling-role MyAutoScalingRole` 命令來指定自動擴展所用的 IAM 角色。預設角色為 `EMR_AutoScaling_DefaultRole`，可由 `create-default-roles` 命令建立。該角色只能在建立叢集時新增，且無法新增至既有的叢集。

如需有關設定自動擴展政策時可用參數的詳細說明，請參閱《Amazon EMR API 參考》**中的 [PutAutoScalingPolicy](https://docs.aws.amazon.com/ElasticMapReduce/latest/API/API_PutAutoScalingPolicy.html)。

### 使用套用至執行個體群組的自動擴展政策來建立叢集


也可以在 `--instance-groups` 命令的 `aws emr create-cluster` 選項中指定自動調整規模的設定。以下範例所說明的建立叢集命令中，是以內嵌方式提供核心執行個體群組的自動調整規模政策。命令會建立相當於預設橫向擴展政策的擴展組態，該政策會在您使用適用於 Amazon EMR AWS 管理主控台 的 建立自動擴展政策時顯示。為了簡潔之故，不會顯示縮減政策。不建議建立不含縮減規則的橫向擴展規則。

```
aws emr create-cluster --release-label emr-5.2.0 --service-role EMR_DefaultRole --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole --auto-scaling-role EMR_AutoScaling_DefaultRole  --instance-groups Name=MyMasterIG,InstanceGroupType=MASTER,InstanceType=m5.xlarge,InstanceCount=1 'Name=MyCoreIG,InstanceGroupType=CORE,InstanceType=m5.xlarge,InstanceCount=2,AutoScalingPolicy={Constraints={MinCapacity=2,MaxCapacity=10},Rules=[{Name=Default-scale-out,Description=Replicates the default scale-out rule in the console.,Action={SimpleScalingPolicyConfiguration={AdjustmentType=CHANGE_IN_CAPACITY,ScalingAdjustment=1,CoolDown=300}},Trigger={CloudWatchAlarmDefinition={ComparisonOperator=LESS_THAN,EvaluationPeriods=1,MetricName=YARNMemoryAvailablePercentage,Namespace=AWS/ElasticMapReduce,Period=300,Statistic=AVERAGE,Threshold=15,Unit=PERCENT,Dimensions=[{Key=JobFlowId,Value="${emr.clusterId}"}]}}}]}'				
```

 以下命令說明如何使用命令列提供自動擴展政策定義，作為執行個體群組組態檔案 (名稱為 `instancegroupconfig.json`) 的一部分。

```
aws emr create-cluster --release-label emr-5.2.0 --service-role EMR_DefaultRole --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole --instance-groups file://your/path/to/instancegroupconfig.json --auto-scaling-role EMR_AutoScaling_DefaultRole								
```

組態檔案的內容如下所示：

```
[
{
  "InstanceCount": 1,
  "Name": "MyMasterIG",
  "InstanceGroupType": "MASTER",
  "InstanceType": "m5.xlarge"
},
{
  "InstanceCount": 2,
  "Name": "MyCoreIG",
  "InstanceGroupType": "CORE",
  "InstanceType": "m5.xlarge",
  "AutoScalingPolicy":
    {
     "Constraints":
      {
       "MinCapacity": 2,
       "MaxCapacity": 10
      },
     "Rules":
     [
      {
       "Name": "Default-scale-out",
       "Description": "Replicates the default scale-out rule in the console for YARN memory.",
       "Action":{
        "SimpleScalingPolicyConfiguration":{
          "AdjustmentType": "CHANGE_IN_CAPACITY",
          "ScalingAdjustment": 1,
          "CoolDown": 300
        }
       },
       "Trigger":{
        "CloudWatchAlarmDefinition":{
          "ComparisonOperator": "LESS_THAN",
          "EvaluationPeriods": 1,
          "MetricName": "YARNMemoryAvailablePercentage",
          "Namespace": "AWS/ElasticMapReduce",
          "Period": 300,
          "Threshold": 15,
          "Statistic": "AVERAGE",
          "Unit": "PERCENT",
          "Dimensions":[
             {
               "Key" : "JobFlowId",
               "Value" : "${emr.clusterId}"
             }
          ]
        }
       }
      }
     ]
   }
}
]
```

### 將含有自動擴展政策的執行個體群組新增至叢集


可以使用 `--instance-groups` 選項搭配 `add-instance-groups` 命令來指定擴展政策組態，方式與使用 `create-cluster` 時相同。以下範例參考的是 JSON 檔案 `instancegroupconfig.json`，搭配執行個體群組的組態。

```
aws emr add-instance-groups --cluster-id j-1EKZ3TYEVF1S2 --instance-groups file://your/path/to/instancegroupconfig.json
```

### 將自動擴展政策套用到既有的執行個體群組上，或修改所套用的政策


請使用 `aws emr put-auto-scaling-policy` 指定將自動調整規模政策套用到既有的執行個體群組上。該執行個體群組必須屬於某個使用自動擴展 IAM 角色的叢集。以下範例參考的是 JSON 檔案 `autoscaleconfig.json`，該檔案指定了自動調整規模政策的組態。

```
aws emr put-auto-scaling-policy --cluster-id j-1EKZ3TYEVF1S2 --instance-group-id ig-3PLUZBA6WLS07 --auto-scaling-policy file://your/path/to/autoscaleconfig.json 
```

`autoscaleconfig.json` 檔案的內容所定義的橫向擴展規則與上個範例相同，如下所示。

```
{
          "Constraints": {
                  "MaxCapacity": 10,
                  "MinCapacity": 2
          },
          "Rules": [{
                  "Action": {
                          "SimpleScalingPolicyConfiguration": {
                                  "AdjustmentType": "CHANGE_IN_CAPACITY",
                                  "CoolDown": 300,
                                  "ScalingAdjustment": 1
                          }
                  },
                  "Description": "Replicates the default scale-out rule in the console for YARN memory",
                  "Name": "Default-scale-out",
                  "Trigger": {
                          "CloudWatchAlarmDefinition": {
                                  "ComparisonOperator": "LESS_THAN",
                                  "Dimensions": [{
                                          "Key": "JobFlowId",
                                          "Value": "${emr.clusterID}"
                                  }],
                                  "EvaluationPeriods": 1,
                                  "MetricName": "YARNMemoryAvailablePercentage",
                                  "Namespace": "AWS/ElasticMapReduce",
                                  "Period": 300,
                                  "Statistic": "AVERAGE",
                                  "Threshold": 15,
                                  "Unit": "PERCENT"
                          }
                  }
          }]
  }
```

### 從執行個體群組中移除自動擴展政策


```
aws emr remove-auto-scaling-policy --cluster-id j-1EKZ3TYEVF1S2 --instance-group-id ig-3PLUZBA6WLS07
```

### 擷取自動擴展政策組態


`describe-cluster` 命令會擷取 InstanceGroup 區塊中的政策組態。舉例而言，以下命令會擷取叢集 ID 為 `j-1CWOHP4PI30VJ` 的叢集的組態。

```
aws emr describe-cluster --cluster-id j-1CWOHP4PI30VJ
```

該命令會產生以下的輸出範例。

```
{
    "Cluster": {
        "Configurations": [],
        "Id": "j-1CWOHP4PI30VJ",
        "NormalizedInstanceHours": 48,
        "Name": "Auto Scaling Cluster",
        "ReleaseLabel": "emr-5.2.0",
        "ServiceRole": "EMR_DefaultRole",
        "AutoTerminate": false,
        "TerminationProtected": true,
        "MasterPublicDnsName": "ec2-54-167-31-38.compute-1.amazonaws.com",
        "LogUri": "s3n://aws-logs-232939870606-us-east-1/elasticmapreduce/",
        "Ec2InstanceAttributes": {
            "Ec2KeyName": "performance",
            "AdditionalMasterSecurityGroups": [],
            "AdditionalSlaveSecurityGroups": [],
            "EmrManagedSlaveSecurityGroup": "sg-09fc9362",
            "Ec2AvailabilityZone": "us-east-1d",
            "EmrManagedMasterSecurityGroup": "sg-0bfc9360",
            "IamInstanceProfile": "EMR_EC2_DefaultRole"
        },
        "Applications": [
            {
                "Name": "Hadoop",
                "Version": "2.7.3"
            }
        ],
        "InstanceGroups": [
            {
                "AutoScalingPolicy": {
                    "Status": {
                        "State": "ATTACHED",
                        "StateChangeReason": {
                            "Message": ""
                        }
                    },
                    "Constraints": {
                        "MaxCapacity": 10,
                        "MinCapacity": 2
                    },
                    "Rules": [
                        {
                            "Name": "Default-scale-out",
                            "Trigger": {
                                "CloudWatchAlarmDefinition": {
                                    "MetricName": "YARNMemoryAvailablePercentage",
                                    "Unit": "PERCENT",
                                    "Namespace": "AWS/ElasticMapReduce",
                                    "Threshold": 15,
                                    "Dimensions": [
                                        {
                                            "Key": "JobFlowId",
                                            "Value": "j-1CWOHP4PI30VJ"
                                        }
                                    ],
                                    "EvaluationPeriods": 1,
                                    "Period": 300,
                                    "ComparisonOperator": "LESS_THAN",
                                    "Statistic": "AVERAGE"
                                }
                            },
                            "Description": "",
                            "Action": {
                                "SimpleScalingPolicyConfiguration": {
                                    "CoolDown": 300,
                                    "AdjustmentType": "CHANGE_IN_CAPACITY",
                                    "ScalingAdjustment": 1
                                }
                            }
                        },
                        {
                            "Name": "Default-scale-in",
                            "Trigger": {
                                "CloudWatchAlarmDefinition": {
                                    "MetricName": "YARNMemoryAvailablePercentage",
                                    "Unit": "PERCENT",
                                    "Namespace": "AWS/ElasticMapReduce",
                                    "Threshold": 75,
                                    "Dimensions": [
                                        {
                                            "Key": "JobFlowId",
                                            "Value": "j-1CWOHP4PI30VJ"
                                        }
                                    ],
                                    "EvaluationPeriods": 1,
                                    "Period": 300,
                                    "ComparisonOperator": "GREATER_THAN",
                                    "Statistic": "AVERAGE"
                                }
                            },
                            "Description": "",
                            "Action": {
                                "SimpleScalingPolicyConfiguration": {
                                    "CoolDown": 300,
                                    "AdjustmentType": "CHANGE_IN_CAPACITY",
                                    "ScalingAdjustment": -1
                                }
                            }
                        }
                    ]
                },
                "Configurations": [],
                "InstanceType": "m5.xlarge",
                "Market": "ON_DEMAND",
                "Name": "Core - 2",
                "ShrinkPolicy": {},
                "Status": {
                    "Timeline": {
                        "CreationDateTime": 1479413437.342,
                        "ReadyDateTime": 1479413864.615
                    },
                    "State": "RUNNING",
                    "StateChangeReason": {
                        "Message": ""
                    }
                },
                "RunningInstanceCount": 2,
                "Id": "ig-3M16XBE8C3PH1",
                "InstanceGroupType": "CORE",
                "RequestedInstanceCount": 2,
                "EbsBlockDevices": []
            },
            {
                "Configurations": [],
                "Id": "ig-OP62I28NSE8M",
                "InstanceGroupType": "MASTER",
                "InstanceType": "m5.xlarge",
                "Market": "ON_DEMAND",
                "Name": "Master - 1",
                "ShrinkPolicy": {},
                "EbsBlockDevices": [],
                "RequestedInstanceCount": 1,
                "Status": {
                    "Timeline": {
                        "CreationDateTime": 1479413437.342,
                        "ReadyDateTime": 1479413752.088
                    },
                    "State": "RUNNING",
                    "StateChangeReason": {
                        "Message": ""
                    }
                },
                "RunningInstanceCount": 1
            }
        ],
        "AutoScalingRole": "EMR_AutoScaling_DefaultRole",
        "Tags": [],
        "BootstrapActions": [],
        "Status": {
            "Timeline": {
                "CreationDateTime": 1479413437.339,
                "ReadyDateTime": 1479413863.666
            },
            "State": "WAITING",
            "StateChangeReason": {
                "Message": "Cluster ready after last step completed."
            }
        }
    }
}
```

# 手動調整執行中 Amazon EMR 叢集的大小
調整執行中叢集的大小

您可以使用 AWS 管理主控台 AWS CLI或 Amazon EMR API，從執行中叢集的核心和任務執行個體群組和執行個體機群新增和移除執行個體。若叢集使用的是執行個體群組，您要明確地變更執行個體數量。若叢集使用的是執行個體機群，您可以將目標單位變更為隨需執行個體和 Spot 執行個體。接著執行個體機群會新增和移除執行個體，以符合新目標。如需詳細資訊，請參閱[執行個體機群選項](emr-instance-fleet.md#emr-instance-fleet-options)。只要執行個體可供使用，應用程式便可使用新佈建的 Amazon EC2 執行個體來託管節點。當執行個體遭移除時，Amazon EMR 以不會對作業造成干擾的方式來關閉作業，並避免資料遺失。如需詳細資訊，請參閱[於任務完成時終止](emr-scaledown-behavior.md#emr-scaledown-terminate-task)。

## 使用主控台調整叢集大小


可使用 Amazon EMR 主控台調整執行中叢集的大小。

------
#### [ Console ]

**使用新主控台變更現有叢集的執行個體數量**

1. 登入 AWS 管理主控台，並在 https：//[https://console.aws.amazon.com/emr](https://console.aws.amazon.com/emr) 開啟 Amazon EMR 主控台。

1. 在左側導覽窗格中的 **EMR on EC2** 下，選擇**叢集**，然後選取您要更新的叢集。叢集必須在執行中；您無法調整佈建中或已終止叢集的大小。

1. 在叢集詳細資訊頁面的**執行個體**索引標籤中，檢視**執行個體群組**面板。

1. 若要調整現有執行個體群組的大小，請選取您要調整大小的核心或任務執行個體群組旁邊的選項按鈕，然後選擇**調整執行個體群組大小**。為執行個體群組指定新的執行個體數量，然後選取**調整大小**。
**注意**  
如果您選擇減少執行中執行個體群組的大小，Amazon EMR 會智慧地從群組中選取要移除的執行個體，從而將資料遺失降到最低。如要更精細地控制調整大小動作，可以選取執行個體群組的 **ID**，選擇要移除的執行個體，然後使用**終止**選項。如需有關智慧縮減規模行為的詳細資訊，請參閱 [Amazon EMR 叢集的叢集縮減選項](emr-scaledown-behavior.md)。

1. 如果想要取消調整大小動作，可以為狀態為**調整大小**的執行個體群組選取選項按鈕，然後從清單動作中選擇**停止調整大小**。

1. 若要將一個或多個任務執行個體群組新增至叢集以回應增加的工作負載，請從清單動作中選擇**新增任務執行個體群組**。選擇 Amazon EC2 執行個體類型，輸入任務群組的執行個體數量，然後選取**新增任務執行個體群組**以傳回叢集的**執行個體群組**面板。

------

變更節點數量時，執行個體群組的 **Status (狀態)** 也會更新。提出的變更完成時，**Status (狀態)** 為 **Running (執行中)**。

## 使用 調整叢集的大小 AWS CLI


您可以使用 AWS CLI 來調整執行中叢集的大小。您可以增加或減少任務節點的數量，並可增加執行中叢集的核心節點數量。您也可以使用 AWS CLI 或 API 關閉核心執行個體群組中的執行個體。此動作請務必謹慎進行。關閉核心執行個體群組中的執行個體，會導致資料遺失的風險，且不會自動替換執行個體。

除了調整核心和任務群組的大小外，也可以使用 AWS CLI，將一個或更多個執行個體群組新增至執行中的叢集。<a name="IncreaseDecreaseNodesawscli"></a>

**使用 變更執行個體計數來調整叢集的大小 AWS CLI**

您可以將執行個體新增至核心群組或任務群組，也可以使用 `InstanceCount` 參數從 AWS CLI `modify-instance-groups`具有 子命令的任務群組中移除執行個體。若要將執行個體新增至核心群組或任務群組，請提高 `InstanceCount`。若要減少任務群組中執行個體的數量，則降低 `InstanceCount`。將任務群組中執行個體的數量變更為 0，即會移除所有執行個體，但不會移除執行個體群組。
+ 若要將任務執行個體群組的執行個體數量從 3 增加為 4，請輸入以下命令，並將 *ig-31JXXXXXXBTO* 替換為執行個體群組的 ID。

  ```
  aws emr modify-instance-groups --instance-groups InstanceGroupId=ig-31JXXXXXXBTO,InstanceCount=4
  ```

  若要取得 `InstanceGroupId`，請使用 `describe-cluster` 子命令。在名為 `Cluster` 的 JSON 物件的輸出結果中，含有各個執行個體群組的 ID。若要使用此命令，您需要叢集 ID (可使用 `aws emr list-clusters` 命令或使用主控台取得)。若要取得執行個體群組 ID，請輸入以下命令，並將 *j-2AXXXXXXGAPLF* 改為叢集 ID。

  ```
  aws emr describe-cluster --cluster-id j-2AXXXXXXGAPLF
  ```

  使用 AWS CLI，您也可以使用 `--modify-instance-groups`子命令終止核心執行個體群組中的執行個體。
**警告**  
指定 `EC2InstanceIdsToTerminate` 時請務必小心謹慎。不論在執行個體上執行的應用程式處於何種狀態，執行個體都會立即終止，且不會自動更換執行個體。無論叢集的 **Scale down behavior (縮減規模行為)** 設定為何，均會如此。以此種方式終止執行個體，可能會導致資料損失，叢集也可能會出現意料外的行為。

  若要終止特定的執行個體，則需要執行個體群組 ID (由 `aws emr describe-cluster --cluster-id` 子命令傳回) 和執行個體 ID (由 `aws emr list-instances --cluster-id` 子命令傳回)，請輸入以下命令並將 *ig-6RXXXXXX07SA* 改為執行個體群組 ID，*i-f9XXXXf2* 改為執行個體 ID。

  ```
  1. aws emr modify-instance-groups --instance-groups InstanceGroupId=ig-6RXXXXXX07SA,EC2InstanceIdsToTerminate=i-f9XXXXf2
  ```

  如需在 中使用 Amazon EMR 命令的詳細資訊 AWS CLI，請參閱 [https://docs.aws.amazon.com/cli/latest/reference/emr](https://docs.aws.amazon.com/cli/latest/reference/emr)。

**使用 新增任務執行個體群組來調整叢集大小 AWS CLI**

使用 AWS CLI，您可以將 1-48 個任務執行個體群組新增至具有 `--add-instance-groups`子命令的叢集。任務執行個體群組僅能新增到包含主要執行個體群組和核心執行個體群組的叢集內。使用 時 AWS CLI，您每次使用 `--add-instance-groups` 子命令時最多可新增五個任務執行個體群組。

1. 若要在叢集中新增單個任務執行個體群組，請輸入以下命令，並將 *j-JXBXXXXXX37R* 改為叢集 ID。

   ```
   1. aws emr add-instance-groups --cluster-id j-JXBXXXXXX37R --instance-groups InstanceCount=6,InstanceGroupType=task,InstanceType=m5.xlarge
   ```

1. 若要在叢集中新增多個任務執行個體群組，請輸入以下命令，並將 *j-JXBXXXXXX37R* 改為叢集 ID。一個命令最多可新增五個任務執行個體群組。

   ```
   aws emr add-instance-groups --cluster-id j-JXBXXXXXX37R --instance-groups InstanceCount=6,InstanceGroupType=task,InstanceType=m5.xlarge InstanceCount=10,InstanceGroupType=task,InstanceType=m5.xlarge
   ```

   如需在 中使用 Amazon EMR 命令的詳細資訊 AWS CLI，請參閱 [https://docs.aws.amazon.com/cli/latest/reference/emr](https://docs.aws.amazon.com/cli/latest/reference/emr)。

## 中斷調整大小


若使用的是 Amazon EMR 4.1.0 版或更新版本，您可以在執行既有調整大小的操作中，再次提出調整大小的請求。此外您也可以停止先前提出的調整規模請求，或是提交新的請求來覆寫上一次的請求，而不需等待操作進行完畢。也可以透過主控台停止既有的調整大小操作，或使用 `ModifyInstanceGroups` API 呼叫，將目前的數量做為叢集的目標數量。

以下螢幕截圖顯示的是正在調整規模的任務執行個體群組，選擇 **Stop (停止)** 即可停止調整規模。

![\[Task instance group showing resizing status with options to resize or stop.\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ManagementGuide/images/resize-stop.png)


**使用 中斷調整大小 AWS CLI**

您可以使用 AWS CLI 來使用 `modify-instance-groups` 子命令停止調整大小。假設您的執行個體群組中有六個執行個體，而您想將數量新增到 10。您稍後決定要取消此請求：
+ 最初的請求：

  ```
  aws emr modify-instance-groups --instance-groups InstanceGroupId=ig-myInstanceGroupId,InstanceCount=10
  ```

  停止第一個請求的第二個請求：

  ```
  aws emr modify-instance-groups --instance-groups InstanceGroupId=ig-myInstanceGroupId,InstanceCount=6
  ```

**注意**  
由於此程序並非同步進行，您可以看到執行後續請求之前 API 請求的執行個體變更數量。若是縮減的情況，則節點尚可能還有工作在執行，執行個體群組會等到節點工作完成後再進行縮減。

## 暫停狀態


若執行個體群組在嘗試啟動新的叢集節點時，發生太多錯誤，即會進入暫停狀態。例如，若新節點在執行引導操作時失敗，執行個體群組便會進入 *SUSPENDED* 狀態，而不會繼續佈建新節點。在您解決根本的問題後，請重設叢集執行個體的所需數量，執行個體群組便會重新開始分配節點。修改執行個體群組會指示 Amazon EMR 再次嘗試佈建節點。執行中的節點不會重新啟動或遭到終止。

在 中 AWS CLI，`list-instances`子命令會傳回所有執行個體及其狀態，如同`describe-cluster`子命令。若 Amazon EMR 偵測到執行個體群組出現錯誤，它會將群組的狀態變更為 `SUSPENDED`。

**使用 重設處於 SUSPENDED 狀態的叢集 AWS CLI**

請輸入 `describe-cluster` 子命令和 `--cluster-id` 參數，以檢視叢集中執行個體的狀態。
+ 若要檢視叢集中所有執行個體和執行個體群組的資訊，請輸入以下命令，並將 *j-3KVXXXXXXY7UG* 改為叢集 ID。

  ```
  1. aws emr describe-cluster --cluster-id j-3KVXXXXXXY7UG
  ```

  輸出結果會顯示您的執行個體群組和執行個體的狀態：

  ```
   1. {
   2.     "Cluster": {
   3.         "Status": {
   4.             "Timeline": {
   5.                 "ReadyDateTime": 1413187781.245,
   6.                 "CreationDateTime": 1413187405.356
   7.             },
   8.             "State": "WAITING",
   9.             "StateChangeReason": {
  10.                 "Message": "Waiting after step completed"
  11.             }
  12.         },
  13.         "Ec2InstanceAttributes": {
  14.             "Ec2AvailabilityZone": "us-west-2b"
  15.         },
  16.         "Name": "Development Cluster",
  17.         "Tags": [],
  18.         "TerminationProtected": false,
  19.         "RunningAmiVersion": "3.2.1",
  20.         "NormalizedInstanceHours": 16,
  21.         "InstanceGroups": [
  22.             {
  23.                 "RequestedInstanceCount": 1,
  24.                 "Status": {
  25.                     "Timeline": {
  26.                         "ReadyDateTime": 1413187775.749,
  27.                         "CreationDateTime": 1413187405.357
  28.                     },
  29.                     "State": "RUNNING",
  30.                     "StateChangeReason": {
  31.                         "Message": ""
  32.                     }
  33.                 },
  34.                 "Name": "MASTER",
  35.                 "InstanceGroupType": "MASTER",
  36.                 "InstanceType": "m5.xlarge",
  37.                 "Id": "ig-3ETXXXXXXFYV8",
  38.                 "Market": "ON_DEMAND",
  39.                 "RunningInstanceCount": 1
  40.             },
  41.             {
  42.                 "RequestedInstanceCount": 1,
  43.                 "Status": {
  44.                     "Timeline": {
  45.                         "ReadyDateTime": 1413187781.301,
  46.                         "CreationDateTime": 1413187405.357
  47.                     },
  48.                     "State": "RUNNING",
  49.                     "StateChangeReason": {
  50.                         "Message": ""
  51.                     }
  52.                 },
  53.                 "Name": "CORE",
  54.                 "InstanceGroupType": "CORE",
  55.                 "InstanceType": "m5.xlarge",
  56.                 "Id": "ig-3SUXXXXXXQ9ZM",
  57.                 "Market": "ON_DEMAND",
  58.                 "RunningInstanceCount": 1
  59.             }
  60. ...
  61. }
  ```

  若要檢視特定執行個體群組的資訊，請輸入 `list-instances` 子命令和 `--cluster-id` 及 `--instance-group-types` 的參數。可以檢視主要、核心或任務群組的資訊。

  ```
  1. aws emr list-instances --cluster-id j-3KVXXXXXXY7UG --instance-group-types "CORE"
  ```

  請使用 `modify-instance-groups` 子命令搭配 `--instance-groups` 參數來重設 `SUSPENDED` 狀態下的叢集。`describe-cluster` 子命令會傳回執行個體群組的 ID。

  ```
  1. aws emr modify-instance-groups --instance-groups InstanceGroupId=ig-3SUXXXXXXQ9ZM,InstanceCount=3
  ```

## 減少叢集大小時的考量
考量事項

如果選擇減少執行中叢集的大小，請考慮下列 Amazon EMR 行為和最佳實務：
+ 為了減少對進行中作業的影響，Amazon EMR 會智慧地選取要移除的執行個體。如需有關叢集縮減規模行為的詳細資訊，請參閱《Amazon EMR 管理指南》中的 [於任務完成時終止](emr-scaledown-behavior.md#emr-scaledown-terminate-task)。
+ 當您縮減叢集規模的大小時，Amazon EMR 會將其移除的執行個體中的資料複製到剩餘執行個體。確保群組中保留的執行個體中有足夠的儲存容量來儲存此資料。
+ Amazon EMR 嘗試在群組中的執行個體上停用 HDFS。在減少叢集的大小之前，建議您將 HDFS 寫入 I/O 降至最低。
+ 若要在減少叢集大小時進行最精細的控制，可以在主控台中檢視叢集並瀏覽至**執行個體**索引標籤。選取您要調整大小的執行個體群組的 **ID**。然後針對您要移除的特定執行個體使用**終止**選項。

# 設定佈建逾時以控制 Amazon EMR 中的容量
佈建逾時

使用執行個體機群時，可以設定*佈建逾時*。如果叢集在叢集啟動或叢集擴展操作期間超過指定的時間閾值，佈建逾時會指示 Amazon EMR 停止佈建執行個體容量。下列主題說明如何針對叢集啟動和叢集縱向擴展操作設定佈建逾時。

**Topics**
+ [

# 在 Amazon EMR 中設定叢集啟動的佈建逾時
](emr-provisioning-timeout-launch.md)
+ [

# 自訂 Amazon EMR 中叢集調整大小的佈建逾時期間
](emr-provisioning-timeout-resize.md)

# 在 Amazon EMR 中設定叢集啟動的佈建逾時
啟動的佈建逾時

可定義逾時期間，以便為叢集中的每個機群佈建 Spot 執行個體。如果 Amazon EMR 無法佈建 Spot 容量，您可以選擇終止叢集或改為佈建隨需容量。如果逾時期間在叢集調整大小過程中結束，Amazon EMR 會取消未佈建的 Spot 請求。未佈建的 Spot 執行個體不會傳輸到隨需容量。

執行下列步驟，使用 Amazon EMR 主控台自訂叢集啟動的佈建逾時期間。

------
#### [ Console ]

**使用主控台建立叢集時設定佈建逾時**

1. 登入 AWS 管理主控台，並在 [https://console.aws.amazon.com/emr](https://console.aws.amazon.com/emr)：// 開啟 Amazon EMR 主控台。

1. 在左側導覽窗格中的 **EMR on EC2** 下方，選擇**叢集**，然後選擇**建立叢集**。

1. 在**建立叢集**頁面上，瀏覽至**叢集組態**，然後選取**執行個體機群**。

1. 在**叢集擴展和佈建選項**下，指定核心機群和任務機群的 Spot 大小。

1. 在 **Spot 逾時組態**下，選取**在 Spot 逾時後終止叢集**或**在 Spot 逾時後切換為隨選**。然後，指定佈建 Spot 執行個體的逾時期間。預設值為 1 小時。

1. 選擇適用於您的叢集的任何其他選項。

1. 若要以設定的逾時啟動叢集，請選擇**建立叢集**。

------
#### [ AWS CLI ]

**使用 `create-cluster` 命令指定佈建逾時**

```
aws emr create-cluster \
--release-label emr-5.35.0 \
--service-role EMR_DefaultRole \
--ec2-attributes '{"InstanceProfile":"EMR_EC2_DefaultRole","SubnetIds":["subnet-XXXXX"]}' \
--instance-fleets '[{"InstanceFleetType":"MASTER","TargetOnDemandCapacity":1,"TargetSpotCapacity":0,"LaunchSpecifications":{"OnDemandSpecification":{"AllocationStrategy":"lowest-price"}},"InstanceTypeConfigs":[{"WeightedCapacity":1,"EbsConfiguration":{"EbsBlockDeviceConfigs":[{"VolumeSpecification":{"SizeInGB":32,"VolumeType":"gp2"},"VolumesPerInstance":2}]},"BidPriceAsPercentageOfOnDemandPrice":100,"InstanceType":"m5.xlarge"}],"Name":"Master - 1"},{"InstanceFleetType":"CORE","TargetOnDemandCapacity":1,"TargetSpotCapacity":1,"LaunchSpecifications":{"SpotSpecification":{"TimeoutDurationMinutes":120,"TimeoutAction":"SWITCH_TO_ON_DEMAND"},"OnDemandSpecification":{"AllocationStrategy":"lowest-price"}},"InstanceTypeConfigs":[{"WeightedCapacity":1,"EbsConfiguration":{"EbsBlockDeviceConfigs":[{"VolumeSpecification":{"SizeInGB":32,"VolumeType":"gp2"},"VolumesPerInstance":2}]},"BidPriceAsPercentageOfOnDemandPrice":1,"InstanceType":"m5.xlarge"}],"Name":"Core - 2"}]'
```

------

# 自訂 Amazon EMR 中叢集調整大小的佈建逾時期間
調整大小的佈建逾時

針對叢集中的每個機群，定義佈建 Spot 執行個體的逾時期間。如果 Amazon EMR 無法佈建 Spot 容量，它會取消調整大小請求並停止嘗試佈建額外的 Spot 容量。建立叢集時，可設定逾時。對於執行中的叢集，可以新增或更新逾時。

逾時期間到期時，Amazon EMR 會自動將事件傳送到 Amazon CloudWatch Events 串流。透過 CloudWatch，可以根據指定模式建立符合事件的規則，並將事件傳送至目標以採取動作。例如，可設定傳送電子郵件通知的規則。如需如何建立規則的詳細資訊，請參閱 [使用 CloudWatch 建立 Amazon EMR 事件的規則](emr-events-cloudwatch-console.md)。如需不同事件詳情的詳細資訊，請參閱 [執行個體機群狀態變更事件](emr-manage-cloudwatch-events.md#emr-cloudwatch-instance-fleet-events)。

## 叢集調整大小的佈建逾時範例
範例 (AWS CLI)

**使用 AWS CLI指定調整大小的佈建逾時**

下列範例使用 `create-cluster` 命令來新增調整大小的佈建逾時。

```
aws emr create-cluster \
--release-label emr-5.35.0 \
--service-role EMR_DefaultRole \
--ec2-attributes '{"InstanceProfile":"EMR_EC2_DefaultRole","SubnetIds":["subnet-XXXXX"]}' \
--instance-fleets '[{"InstanceFleetType":"MASTER","TargetOnDemandCapacity":1,"TargetSpotCapacity":0,"InstanceTypeConfigs":[{"WeightedCapacity":1,"EbsConfiguration":{"EbsBlockDeviceConfigs":[{"VolumeSpecification":{"SizeInGB":32,"VolumeType":"gp2"},"VolumesPerInstance":2}]},"BidPriceAsPercentageOfOnDemandPrice":100,"InstanceType":"m5.xlarge"}],"Name":"Master - 1"},{"InstanceFleetType":"CORE","TargetOnDemandCapacity":1,"TargetSpotCapacity":1,"LaunchSpecifications":{"SpotSpecification":{"TimeoutDurationMinutes":120,"TimeoutAction":"SWITCH_TO_ON_DEMAND"},"OnDemandSpecification":{"AllocationStrategy":"lowest-price"}},"ResizeSpecifications":{"SpotResizeSpecification":{"TimeoutDurationMinutes":20},"OnDemandResizeSpecification":{"TimeoutDurationMinutes":25}},"InstanceTypeConfigs":[{"WeightedCapacity":1,"EbsConfiguration":{"EbsBlockDeviceConfigs":[{"VolumeSpecification":{"SizeInGB":32,"VolumeType":"gp2"},"VolumesPerInstance":2}]},"BidPriceAsPercentageOfOnDemandPrice":1,"InstanceType":"m5.xlarge"}],"Name":"Core - 2"}]'
```

下列範例使用 `modify-instance-fleet` 命令來新增調整大小的佈建逾時。

```
aws emr modify-instance-fleet \
--cluster-id j-XXXXXXXXXXXXX \
--instance-fleet '{"InstanceFleetId":"if-XXXXXXXXXXXX","ResizeSpecifications":{"SpotResizeSpecification":{"TimeoutDurationMinutes":30},"OnDemandResizeSpecification":{"TimeoutDurationMinutes":60}}}' \
--region us-east-1
```

下列範例使用 `add-instance-fleet-command` 來新增調整大小的佈建逾時。

```
aws emr add-instance-fleet \
--cluster-id j-XXXXXXXXXXXXX \
--instance-fleet '{"InstanceFleetType":"TASK","TargetOnDemandCapacity":1,"TargetSpotCapacity":0,"InstanceTypeConfigs":[{"WeightedCapacity":1,"EbsConfiguration":{"EbsBlockDeviceConfigs":[{"VolumeSpecification":{"SizeInGB":32,"VolumeType":"gp2"},"VolumesPerInstance":2}]},"BidPriceAsPercentageOfOnDemandPrice":100,"InstanceType":"m5.xlarge"}],"Name":"TaskFleet","ResizeSpecifications":{"SpotResizeSpecification":{"TimeoutDurationMinutes":30},"OnDemandResizeSpecification":{"TimeoutDurationMinutes":35}}}' \
--region us-east-1
```

**指定調整大小並使用 啟動的佈建逾時 AWS CLI**

下列範例使用 `create-cluster` 命令來新增調整大小的佈建逾時並啟動。

```
aws emr create-cluster \
--release-label emr-5.35.0 \
--service-role EMR_DefaultRole \
--ec2-attributes '{"InstanceProfile":"EMR_EC2_DefaultRole","SubnetIds":["subnet-XXXXX"]}' \
--instance-fleets '[{"InstanceFleetType":"MASTER","TargetOnDemandCapacity":1,"TargetSpotCapacity":0,"LaunchSpecifications":{"OnDemandSpecification":{"AllocationStrategy":"lowest-price"}},"InstanceTypeConfigs":[{"WeightedCapacity":1,"EbsConfiguration":{"EbsBlockDeviceConfigs":[{"VolumeSpecification":{"SizeInGB":32,"VolumeType":"gp2"},"VolumesPerInstance":2}]},"BidPriceAsPercentageOfOnDemandPrice":100,"InstanceType":"m5.xlarge"}],"Name":"Master - 1"},{"InstanceFleetType":"CORE","TargetOnDemandCapacity":1,"TargetSpotCapacity":1,"LaunchSpecifications":{"SpotSpecification":{"TimeoutDurationMinutes":120,"TimeoutAction":"SWITCH_TO_ON_DEMAND"},"OnDemandSpecification":{"AllocationStrategy":"lowest-price"}},"ResizeSpecifications":{"SpotResizeSpecification":{"TimeoutDurationMinutes":20},"OnDemandResizeSpecification":{"TimeoutDurationMinutes":25}},"InstanceTypeConfigs":[{"WeightedCapacity":1,"EbsConfiguration":{"EbsBlockDeviceConfigs":[{"VolumeSpecification":{"SizeInGB":32,"VolumeType":"gp2"},"VolumesPerInstance":2}]},"BidPriceAsPercentageOfOnDemandPrice":1,"InstanceType":"m5.xlarge"}],"Name":"Core - 2"}]'
```

## 調整大小佈建逾時的注意事項
考量事項

如果為執行個體機群設定叢集佈建逾時，請考慮下列行為。
+ 可以為 Spot 執行個體和隨需執行個體設定佈建逾時。佈建逾時下限為 5 分鐘。佈建逾時上限為 7 天。
+ 只能為使用執行個體機群的 EMR 叢集設定佈建逾時。必須單獨設定每個核心和任務機群。
+ 建立叢集時，可設定佈建逾時。可以為執行中的叢集新增逾時或更新現有逾時。
+ 如果您提交多個調整大小操作，則 Amazon EMR 會追蹤每個調整大小操作的佈建逾時。例如，將叢集的佈建逾時設定為 *60* 分鐘。然後，在 *T1* 時間提交調整大小操作 *R1*。在 *T2* 時間提交第二個調整大小操作 *R2*。R1 的佈建逾時會在 *T1 \$1 60 分鐘*到期。R2 的佈建逾時會在 *T2 \$1 60 分鐘*到期。
+ 如果在逾時到期之前提交新的縱向擴展調整大小操作，Amazon EMR 會繼續嘗試為您的 EMR 叢集佈建容量。

# Amazon EMR 叢集的叢集縮減選項


**注意**  
自 Amazon EMR 5.10.0 版本以來，不再支援縮減規模行為選項。由於 Amazon EC2 開始採用以秒計費，Amazon EMR 叢集的預設縮減規模行為現在會在任務完成時終止。

在 Amazon EMR 5.1.0 到 5.9.1 版本中，有兩種縮減規模行為選項：於 Amazon EC2 執行個體每小時計價範圍內終止，或於任務完成時終止。自 Amazon EMR 5.10.0 版開始，因為在 Amazon EC2 內引入了每秒計費功能，已淘汰在執行個體每小時範圍內終止的設定。若版本中有在執行個體每小時範圍內終止的選項，也不建議指定該選項。

**警告**  
如果您使用 AWS CLI 向 `modify-instance-groups` 發出 `EC2InstanceIdsToTerminate`，這些執行個體會立即終止，而不考慮這些設定，無論其上執行的應用程式狀態為何。以此種方式終止執行個體，可能會導致資料損失，叢集也可能會出現意料外的行為。

若指定在任務完成時終止，Amazon EMR 會拒絕列出並耗盡節點中的任務，然後再終止 Amazon EC2 執行個體。不論指定的是哪一種行為，若可能導致 HDFS 損壞，Amazon EMR 都不會終止核心執行個體群組中的 Amazon EC2 執行個體。

## 於任務完成時終止


Amazon EMR 允許您在不影響工作負載的情況下縮減叢集規模。在調整規模操作期間，Amazon EMR 會嘗試在核心和任務節點上正常解除委任 YARN、HDFS 和其他協助程式，而不會遺失資料或中斷任務。Amazon EMR 僅會在指派給執行個體群組的工作已完成且處於閒置狀態時，減少執行個體群組的大小。若要逐漸停用 YARN NodeManager，可以手動調整節點等待停用的時間。

**注意**  
當正常解除委任發生時，可能會發生資料遺失。請務必備份您的資料。

**重要**  
在正常取代運作狀態不佳的核心執行個體期間，HDFS 資料可能會永久遺失。建議您一律備份資料。

可使用 `YARN-site` 組態分類內的屬性來加以設定。使用 Amazon EMR 5.12.0 及更高版本，指定 `YARN.resourcemanager.nodemanager-graceful-decommission-timeout-secs` 屬性。使用早期的 Amazon EMR 版本，指定 `YARN.resourcemanager.decommissioning.timeout` 屬性。

若在除役逾時時間過去後，仍有執行中的 YARN 應用程式，則節點會遭到強制除役，而 YARN 會將受影響的容器重新安排到其他節點上。預設值為 3600 秒 (1 小時)。可將此逾時值隨意設為較高的值，強迫逐漸減少等待更長時間。如需詳細資訊，請參閱 Apache Hadoop 文件中的[正常停止 YARN 節點](http://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-site/GracefulDecommission.html)。

### 任務節點群組


Amazon EMR 會以智慧方式挑選執行個體 (它們沒有按照任何步驟或應用程式執行的任務) 並先從叢集中移除這些執行個體。若叢集中的所有執行個體均在使用中，Amazon EMR 會等待執行個體上的任務完成，然後再從叢集中將其移除。預設等待時間為 1 小時。可以透過 `YARN.resourcemanager.decommissioning.timeout` 設定變更此值。Amazon EMR 會動態使用新設定。可以將其設定為任意較大數字，以確保 Amazon EMR 不會在減少叢集大小時終止任何任務。

### 核心節點群組


在核心節點上，YARN NodeManager 和 HDFS DataNode 常駐程式都必須停用，執行個體群組才能減少。若為 YARN，逐漸減少的方式可確保標示為正在停用的節點僅會在沒有待定或未完成的容器或應用程式時轉換為 `DECOMMISSIONED` 狀態。若開始除役時，節點上就沒有正在執行的容器，則除役工作會立即完成。

若為 HDFS，逐漸減少的方式可確保 HDFS 有足夠的目標容量，可容納所有既有的區塊。若目標的容量不足，則僅有部分的核心執行個體能夠除役，讓剩下的節點可處理存在於 HDFS 的資料。請確保留有更多 HDFS 容量，以供未來除役使用。在嘗試減少執行個體群組之前，也應該嘗試將寫入 I/O 降至最低。過多的寫入 I/O 可能會延遲完成調整大小操作。

另一個限制是預設的複寫係數，`/etc/hadoop/conf/hdfs-site` 中的 `dfs.replication`。在建立叢集時，Amazon EMR 會根據叢集中執行個體的數量來設定該值：`1` 具有 1 到 3 個執行個體，`2` 適用於具有 4 到 9 個執行個體的叢集，`3` 適用於執行個體超過 10 個的叢集 。

**警告**  
如果單一節點發生故障，在少於四個節點的叢集上將 `dfs.replication` 設定為 1 可能會導致 HDFS 資料遺失。建議您對生產工作負載使用至少具有四個核心節點的叢集。
Amazon EMR 不允許叢集將核心節點擴展至低於 `dfs.replication`。例如，如果 `dfs.replication = 2`，核心節點的最小數量為 2。
當您使用受管擴展即自動擴展，或選擇手動調整叢集大小時，建議您將 `dfs.replication` 設定為 2 或更高。

逐漸減少不會讓您減少低於 HDFS 複寫係數的核心節點。這是為了允許 HDFS 關閉檔案，因為複本不足。若要避開此限制，請降低複寫因素，並重新啟動 NameNode 常駐程式。

# 設定 Amazon EMR 縮減規模行為


**注意**  
Amazon EMR 5.10.0 版及更新版本不再支援「於執行個體時數終止」縮減規模行為選項。下列縮減規模行為選項只會顯示在 Amazon EMR 主控台的 5.1.0 到 5.9.1 版本中。

您可以在建立叢集時使用 AWS CLI、 AWS 管理主控台或 Amazon EMR API 來設定縮減規模行為。

------
#### [ Console ]

**使用主控台設定縮減規模行為**

1. 登入 AWS 管理主控台，並在 https：//[https://console.aws.amazon.com/emr](https://console.aws.amazon.com/emr) 開啟 Amazon EMR 主控台。

1. 在左側導覽窗格中的 **EC2 上的 EMR** 下，選擇**叢集**，然後選擇**建立叢集**。

1. 在**叢集擴展和佈建選項**區段中，選擇**使用自訂自動擴展。 **在**自訂自動擴展政策**下，選擇**加號動作按鈕**以在政策**中新增擴展**。建議您同時新增**向內擴展**和**向外擴展**政策。僅在一組政策中新增 意味著 Amazon EMR 只會執行單向擴展，而且您必須手動執行其他動作。

1. 選擇適用於您的叢集的任何其他選項。

1. 若要啟動您的叢集，請選擇**建立叢集**。

------
#### [ AWS CLI ]

**使用 設定縮減規模行為 AWS CLI**
+ 使用 `--scale-down-behavior` 選項指定 `TERMINATE_AT_INSTANCE_HOUR` 或 `TERMINATE_AT_TASK_COMPLETION`。

------