

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

# Amazon EMR 叢集的叢集縮減選項
<a name="emr-scaledown-behavior"></a>

**注意**  
自 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 執行個體。

## 於任務完成時終止
<a name="emr-scaledown-terminate-task"></a>

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

### 任務節點群組
<a name="emr-scaledown-task-nodes"></a>

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

### 核心節點群組
<a name="emr-scaledown-core-nodes"></a>

在核心節點上，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 常駐程式。