

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

# 使用 Amazon EMR 替换运行状况不佳的节点
<a name="emr-plan-node-replacement"></a>

亚马逊 EMR 定期使用 Apache Hadoop 中的[NodeManager 运行状况检查器服务](https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/NodeManager.html#Health_checker_service)来监控 Amazon EC2 集群上亚马逊 EMR 中核心节点的状态。如果某节点未正常运行，则该节点将被标记为运行状况不佳，并且运行状况检查程序会将该节点报告给 Amazon EMR 控制器。Amazon EMR 控制器会将该节点添加到拒绝列表中，阻止该节点接收新的 YARN 应用程序，直到该节点的状态得到改善。

**注意**  
节点运行状况不佳的一个常见原因是磁盘空间不足。有关核心节点的磁盘空间即将耗尽的更多信息，请参阅以下 **re:Post 知识中心**文章：[为什么我的 Amazon EMR 集群中的核心节点会耗尽磁盘空间？](https://repost.aws/knowledge-center/core-node-emr-cluster-disk-space) 

**注意**  
Hadoop 确实提供了运行自定义节点运行状况检查的功能。Apache Hadoop 文档对此进行了更详细的解释，网址为。[NodeManager](https://hadoop.apache.org/docs/r3.3.2/hadoop-yarn/hadoop-yarn-site/NodeManager.html)

您可以选择 Amazon EMR 是应终止运行状况不佳的节点，还是将其保留在集群中。如果关闭运行状况不佳的节点替换，则它们将保留在拒绝列表中，并继续计入集群容量。您仍然可以连接到 Amazon EC2 核心实例进行配置和恢复，因此如果您想增加容量，则可以调整集群大小。有关节点更换和终止如何工作的更多信息，请参阅[使用终止保护](https://docs.aws.amazon.com/emr/latest/ManagementGuide/UsingEMR_TerminationProtection.html)。

如果开启运行状况不佳的节点替换，Amazon EMR 会终止运行状况不佳的核心节点，并根据实例组中的实例数或实例集的目标容量预置新实例。如果任何节点运行状况不佳的时间超过 45 分钟，Amazon EMR 将[正常替换这些节点](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-scaledown-behavior.html#emr-scaledown-terminate-task)。如果某节点的正常停用未在一小时内完成，则该节点将被强制终止，除非终止它会使集群低于复制因子或 HDFS 容量限制。

**重要**  
请注意，节点正常停用或终止之前所花费的时间可能会发生变化。  
尽管运行状况不佳的节点替换可以显著降低数据丢失的可能性，但是它并不能完全消除风险。在正常替换运行状况不佳的核心实例期间，HDFS 数据可能会永久丢失。我们建议您始终备份数据。

有关识别运行状况不佳的节点和恢复的更多信息，请参阅[资源错误](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-troubleshoot-error-resource.html)。此外，有关维护集群运行状况的更多最佳实践，请参阅以下文档了解资源错误 [Amazon EMR 集群终止并显示 NO\$1SLAVE\$1LEFT，核心节点为 FAILED\$1BY\$1MASTER](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-cluster-NO_SLAVE_LEFT-FAILED_BY_MASTER.html)。

Amazon EMR CloudWatch 会针对不健康的节点替换发布亚马逊事件，因此您可以跟踪运行状况不佳的核心实例的情况。有关更多信息，请参阅[运行状况不佳的节点替换事件](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-manage-cloudwatch-events.html#emr-cloudwatch-unhealthy-node-replacement-events)。

## 默认节点替换和终止保护设置
<a name="emr-plan-node-replacement-defaults"></a>

运行状况不佳的节点替换适用于所有 Amazon EMR 发行版，但默认设置取决于您选择的发行版标签。您可以在创建新集群时配置运行状况不佳的节点替换，或随时进入集群配置，更改任意设置。

如果创建的单节点集群或高可用性集群运行 Amazon EMR 7.0 或更低版本，运行状况不佳的节点替换的默认设置取决于终止保护：
+ 启用终止保护会**禁用**运行状况不佳的节点替换。
+ 禁用终止保护会**启用**运行状况不佳的节点替换。

## 启动集群时配置运行状况不佳的节点替换
<a name="emr-plan-node-replacement-create-cluster"></a>

在使用控制台、或 API 启动集群时，您可以启用或禁用运行状况不佳的 AWS CLI节点替换。

默认的运行状况不佳的节点替换设置取决于您启动集群的方式：
+ Amazon EMR 控制台：运行状况不佳的节点替换默认处于**启用**状态。
+ AWS CLI `aws emr create-cluster`— 除非您指定`--no-unhealthy-node-replacement`，否则默认情况下**会启用**不健康的节点替换。
+ Amazon EMR [RunJobFlow API 命令](https://docs.aws.amazon.com/emr/latest/APIReference/API_RunJobFlow.html) — 除非您将`UnhealthyNodeReplacement`布尔值设置为或，否则默认情况下会**启用**不健康的节点替换。`True` `False`

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

**使用控制台创建集群时开启或关闭运行状况不佳的节点替换**

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

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

1. 对于 **EMR 发行版本**，请选择所需的 Amazon EMR 发行版标签。

1. 在**集群终止和节点替换**下，确保已预先选择**运行状况不佳的节点替换（建议）**，或者清除该选项以将其关闭。

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

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

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

**使用创建集群时打开或关闭运行状况不佳的节点替换 AWS CLI**
+ 使用 AWS CLI，您可以使用带`--unhealthy-node-replacement `参数的`create-cluster`命令启动启用了不健康节点替换功能的集群。运行状况不佳的节点替换默认处于开启状态。

  以下示例创建一个集群，该集群启用了运行状况不佳的节点替换：
**注意**  
为了便于读取，包含 Linux 行继续符（\$1）。它们可以通过 Linux 命令删除或使用。对于 Windows，请将它们删除或替换为脱字号（^）。

  ```
  aws emr create-cluster --name "SampleCluster" --release-label emr-7.12.0 \
  --applications Name=Hadoop Name=Hive Name=Pig \
  --use-default-roles --ec2-attributes KeyName=myKey --instance-type m5.xlarge \
  --instance-count 3 --unhealthy-node-replacement
  ```

  有关在中使用 Amazon EMR 命令的更多信息 AWS CLI，请参阅亚马逊 [EMR](https://docs.aws.amazon.com//cli/latest/reference/emr) 命令。 AWS CLI 

------

## 在正在运行的集群中配置运行状况不佳的节点替换
<a name="emr-plan-node-replacement-running-cluster"></a>

您可以使用控制台、或 API 为正在运行的集群开启或关闭不健康的 AWS CLI节点替换。

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

**使用控制台为正在运行的集群开启或关闭运行状况不佳的节点替换**

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

1. 在左侧导航窗格中的 **EMR on EC2** 下，选择 **Clusters**（集群），然后选择要更新的集群。

1. 在集群详细信息页面的**属性**选项卡上，找到**集群终止和节点替换**，然后选择**编辑**。

1. 选中或清除**运行状况不佳的节点替换**复选框以开启或关闭该功能。然后选择 **Save changes**（保存更改）进行确认。

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

**要为正在运行的集群开启或关闭不健康的节点替换，请使用 AWS CLI**
+ 要使用 AWS CLI在正在运行的集群上开启运行状况不佳的节点替换，请使用带 `--unhealthy-node-replacement` 参数的 `modify-cluster-attributes` 命令。要禁用终止保护，请使用 `--no-unhealthy-node-replacement` 参数。

  以下示例在 ID 为 ID *j-3KVTXXXXXX7UG* 的集群上启用不健康的节点替换：

  ```
  1. aws emr modify-cluster-attributes --cluster-id j-3KVTXXXXXX7UG --unhealthy-node-replacement
  ```

  以下示例在同一集群上关闭了运行状况不佳的节点替换：

  ```
  1. aws emr modify-cluster-attributes --cluster-id j-3KVTXXXXXX7UG --no-unhealthy-node-replacement
  ```

------