

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 手动调整正在运行的 Amazon EMR 集群的大小
<a name="emr-manage-resize"></a>

您可以使用、或 Amazon EMR API 从核心实例组和任务实例组以及正在运行的集群中的实例队列中添加和删除实例。 AWS 管理控制台 AWS CLI如果集群使用的是实例组，您可显式更改实例计数。如果集群使用的是实例队列，您可更改按需实例和竞价型实例的目标单位数。然后，实例队列可添加和删除实例以满足新目标。有关更多信息，请参阅[实例集选项](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 管理控制台，然后在 /emr 上打开亚马逊 EMR 控制台。https://console.aws.amazon.com](https://console.aws.amazon.com/emr)

1. 在左侧导航窗格中的 **EMR on EC2** 下，选择 **Clusters**（集群），然后选择要更新的集群。集群必须正在运行；您无法调整预置集群或已终止集群的大小。

1. 在集群详细信息页面的 **Instances**（实例）选项卡上，查看 **Instance groups**（实例组）面板。

1. 要调整现有实例组的大小，请选择要调整大小的核心实例组或任务实例组旁边的单选按钮，然后选择 **Resize instance group**（调整实例组大小）。为实例组指定新的实例数，然后选择 **Resize**（调整大小）。
**注意**  
如果您选择减少正在运行的实例组大小，Amazon EMR 将智能地选择要从实例组中删除的实例，将数据丢失的风险降至最低。要对调整大小操作进行更精细地控制，可以依次选择实例组的 **ID**、要删除的实例，然后使用 **Terminate**（终止）选项。有关智能缩减行为的更多信息，请参阅 [Amazon EMR 集群的集群缩减选项](emr-scaledown-behavior.md)。

1. 如果要取消调整大小操作，您可以选择状态为 **Resizing**（调整大小）的实例组的单选按钮，然后从列表操作中选择 **Stop resize**（停止调整大小）。

1. 要向集群添加一个或多个任务实例组以应对不断增加的工作负载，请从操作列表中选择 **Add task instance group**（添加任务实例组）。选择 Amazon EC2 实例类型，输入任务组的实例数，然后选择 **Add task instance group**（添加任务实例组）以返回到集群的 **Instance groups**（实例组）面板。

------

当您对节点数进行更改时，实例组的 **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。可以在单个命令中添加多达 5 个任务实例组。

   ```
   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_cn/emr/latest/ManagementGuide/images/resize-stop.png)


**使用中断调整大小 AWS CLI**

您可以使用`modify-instance-groups`子命令 AWS CLI 停止调整大小。假定您的实例组包含 6 个实例，您需要将实例增加到 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`。

**使用重置处于 “已暂停” 状态的集群 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` 状态下的集群。实例组 ID 通过 `describe-cluster` 子命令返回。

  ```
  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。
+ 要在缩减集群大小时进行最精细的控制，您可以在控制台中查看集群并导航到 **Instances**（实例）选项卡。选择要调整大小的实例组的 **ID**。然后对要删除的特定实例使用 **Terminate**（终止）选项。