

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

# 在 Amazon EMR 中使用受管擴展功能
<a name="emr-managed-scaling"></a>

**重要**  
我們強烈建議您使用最新的 Amazon EMR 版本 (Amazon EMR 7.13.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)。

## 概觀
<a name="emr-managed-scaling-overview"></a>

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

## 受管擴展可用性
<a name="emr-managed-scaling-availability"></a>
+ 在下文中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)
  + AWSGovCloud （美國東部） (us-gov-east-1)
  + AWSGovCloud （美國西部） (us-gov-west-1)
+ Amazon EMR 受管擴展功能僅適用於 YARN 應用程式，例如 Spark、Hadoop、Hive、Flink。它不支援非 YARN 型應用程式，例如 Presto 和 HBase。

## 受管擴展參數
<a name="emr-managed-scaling-parameters"></a>

必須為受管擴展設定下列參數。這個限制僅適用於核心節點和任務節點。無法在初始設定後擴展主節點。
+ **最小值** (`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 受管擴展功能的考量
<a name="emr-managed-scaling-considerations"></a>
+ 有限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 版和更新版本。

## 功能歷史記錄
<a name="emr-managed-scaling-history"></a>

此資料表列出 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 版和更新版本 | 