

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

# 手動調整執行中 Amazon EMR 叢集的大小
<a name="emr-manage-resize"></a>

您可以使用 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)。

## 使用主控台調整叢集大小
<a name="resize-console"></a>

可使用 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
<a name="ResizingParameters"></a>

您可以使用 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)。

## 中斷調整大小
<a name="interruptible-resize"></a>

若使用的是 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 請求的執行個體變更數量。若是縮減的情況，則節點尚可能還有工作在執行，執行個體群組會等到節點工作完成後再進行縮減。

## 暫停狀態
<a name="emr-manage-resizeSuspended"></a>

若執行個體群組在嘗試啟動新的叢集節點時，發生太多錯誤，即會進入暫停狀態。例如，若新節點在執行引導操作時失敗，執行個體群組便會進入 *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
  ```

## 減少叢集大小時的考量
<a name="resize-considerations"></a>

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