

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

# 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 来发出 a `modify-instance-groups``EC2InstanceIdsToTerminate`，则这些实例将立即终止，而不考虑这些设置，也不管在这些实例上运行的应用程序的状态如何。通过这种方式终止实例将面临数据丢失以及出现不可预测的集群行为的风险。

当指定在任务完成后终止时，Amazon EMR 首先将拒绝列出来自节点的任务，并耗尽这些任务，然后再终止 Amazon EC2 实例。对于指定的任一行为，Amazon EMR 都不会终止核心实例组中的 Amazon EC2 实例（如果这会导致 HDFS 受损）。

## 在任务完成时终止
<a name="emr-scaledown-terminate-task"></a>

Amazon EMR 让您能够在不影响工作负载的情况下缩减集群。在向下调整操作期间，Amazon EMR 会尝试正常停用核心节点和任务节点上的 YARN、HDFS 及其他守护进程，而不会丢失数据或中断任务。Amazon EMR 仅缩减已完成所分配的工作并处于空闲状态的实例组大小。对于 Y NodeManager ARN Graceful 停用，您可以手动调整节点等待停用的时间。

**注意**  
正常停用时，可能会丢失数据。请务必备份数据。

**重要**  
在正常更换运行状况不佳的核心实例期间，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 文档中的 [Graceful Decommission of YARN nodes](http://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-site/GracefulDecommission.html)（正常停止 YARN 节点）。

### 任务节点组
<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-3 个实例为 `1`；4-9 个实例的集群为 `2`；10 个以上实例的集群为 `3`。

**警告**  
如果单个节点出现故障，则在少于四个节点的集群上将 `dfs.replication` 设置为 1 可能会导致 HDFS 数据丢失。建议您使用具有至少四个核心节点的集群来处理生产工作负载。
Amazon EMR 不允许集群扩展 `dfs.replication` 下方的核心节点。例如，如果是 `dfs.replication = 2`，则最小核心节点数为 2。
当您使用托管扩缩、自动扩缩或选择手动调整集群大小时，建议您将设置 `dfs.replication` 为 2 或更高。

自然缩减不允许您将核心节点减少到低于 HDFS 复制因子。这是为了允许 HDFS 因副本不足而关闭文件。要规避此限制，请降低重复因子并重新启动NameNode 守护程序。

# 配置 Amazon EMR 缩减行为
<a name="emr-scaledown-configure"></a>

**注意**  
Amazon EMR 发行版 5.10.0 及更高版本不再支持在实例小时终止缩减行为选项。以下缩减行为选项仅在 Amazon EMR 控制台发行版 5.1.0 到 5.9.1 中显示。

在创建集群时 AWS 管理控制台，您可以使用 AWS CLI、或 Amazon EMR API 来配置缩减行为。

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

**使用控制台配置缩减行为**

1. [登录 AWS 管理控制台，然后在 /emr 上打开亚马逊 EMR 控制台。https://console.aws.amazon.com](https://console.aws.amazon.com/emr)

1. 在左侧导航窗格中的 **EMR on EC2** 下，选择 **Clusters**（集群），然后选择 **Create cluster**（创建集群）。

1. 在**集群扩展和预置选项**部分，选择**使用自定义自动扩展**。在**自定义自动扩展策略**下，选择**加号操作按钮**以添加**横向缩减**策略。建议您同时添加**横向缩减**和**横向扩展**策略。仅添加一组策略意味着 Amazon EMR 只能执行单向扩展，您必须手动执行其他操作。

1. 选择适用于集群的任何其他选项。

1. 要启动集群，选择 **Create cluster**（创建集群）。

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

**使用配置缩小行为 AWS CLI**
+ 使用 `--scale-down-behavior` 选项指定 `TERMINATE_AT_INSTANCE_HOUR` 或 `TERMINATE_AT_TASK_COMPLETION`。

------