

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

# Amazon EMR 集群终止并显示 NO\_SLAVE\_LEFT，核心节点为 FAILED\_BY\_MASTER
<a name="emr-cluster-NO_SLAVE_LEFT-FAILED_BY_MASTER"></a>

通常，发生这一现象是因为禁用了终止保护，而且所有核心节点都超过了 `yarn-site` 配置分类（对应于 `yarn-site.xml` 文件）中最大利用率阈值指定的磁盘存储容量。默认情况下，该值为 90%。当核心节点的磁盘利用率超过利用率阈值时，YARN NodeManager 运行状况服务会将该节点报告为`UNHEALTHY`。如果此节点处于此状态，Amazon EMR 会将此节点列入拒绝名单且不会向其分配 YARN 容器。如果此节点保持不正常状态 45 分钟，则 Amazon EMR 会把要终止的相关 Amazon EC2 实例标记为 `FAILED_BY_MASTER`。当与核心节点关联的所有 Amazon EC2 实例都被标记为终止时，集群将因没有资源用于执行任务而以 `NO_SLAVE_LEFT` 状态终止。

如果一个核心节点超过磁盘利用率，则可能会导致连锁反应。如果单个节点因 HDFS 而超过磁盘利用率阈值，那么其它节点很可能同样会接近阈值。第一个节点超过磁盘利用率阈值时，Amazon EMR 会将其列入拒绝名单。这会增加剩余节点的磁盘利用率负担，因为节点开始在自身之间复制其在已列入拒绝名单的节点上丢失的 HDFS 数据。每个节点随后都会以相同的方式进入 `UNHEALTHY` 状态，并且集群最终会终止。

## 最佳实践和建议
<a name="w2aac36c21c13b7b7"></a>

### 为集群硬件配置充足的存储容量
<a name="w2aac36c21c13b7b7b3"></a>

创建集群时，请确保有足够的核心节点并且每个节点都为 HDFS 提供足够的实例存储空间和 EBS 存储卷。有关更多信息，请参阅[计算集群的必需的 HDFS 容量](emr-plan-instances-guidelines.md#emr-plan-instances-hdfs)。您也可以手动或使用 Auto Scaling 功能，将核心实例添加到现有实例组。新实例与实例组中的其它实例具有相同的存储配置。有关更多信息，请参阅[使用 Amazon EMR 集群扩展来适应不断变化的工作负载](emr-scale-on-demand.md)。

### 启用终止保护
<a name="w2aac36c21c13b7b7b5"></a>

启用终止保护。这样一来，如果核心节点被列入拒绝名单，您可以使用 SSH 连接到关联的 Amazon EC2 实例进行故障排查并恢复数据。如果启用终止保护，请注意，Amazon EMR 不会将该 Amazon EC2 实例替换为新实例。有关更多信息，请参阅 [使用终止保护功能防止 Amazon EMR 集群意外关闭](UsingEMR_TerminationProtection.md)。

### 为 “ MRUnhealthy节点” CloudWatch 指标创建警报
<a name="w2aac36c21c13b7b7b7"></a>

此指标会报告其中报告了 `UNHEALTHY` 状态的节点的数量。此指标等同于 YARN 指标 `mapred.resourcemanager.NoOfUnhealthyNodes`。您可以为此警报设置通知，在节点维持不正常状态到达 45 分钟计时之前提醒您。有关更多信息，请参阅[使用监控 Amazon EMR 指标 CloudWatch](UsingEMR_ViewingMetrics.md)。

### 使用 yarn-site 调整设置
<a name="w2aac36c21c13b7b7b9"></a>

下面的设置可以根据您的应用程序要求进行调整。例如，您可能需要通过提高 `yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage` 的值，来提高节点报告为 `UNHEALTHY` 的磁盘利用率阈值。

在使用 `yarn-site` 配置分类创建集群时，您可以设置这些值。有关更多信息，请参阅《Amazon EMR 版本指南》**中的[配置应用程序](https://docs.amazonaws.cn/emr/latest/ReleaseGuide/emr-configure-apps.html)。您还可以使用 SSH 连接到与核心节点关联的 Amazon EC2 实例，然后使用文本编辑器在 `/etc/hadoop/conf.empty/yarn-site.xml` 添加值。进行更改后，必须按 hadoop-yarn-nodemanager如下所示重新启动。

**重要**  
当您重新启动 NodeManager 服务时，除非在创建集群时将活动的 YARN 容器设置`yarn.nodemanager.recovery.enabled`为`true`使用`yarn-site`配置分类，否则活动的 YARN 容器将被终止。您还必须使用 `yarn.nodemanager.recovery.dir` 属性指定存储容器状态的目录。

```
sudo /sbin/stop hadoop-yarn-nodemanager
sudo /sbin/start hadoop-yarn-nodemanager
```

有关当前 `yarn-site` 属性和默认值的更多信息，请参阅 Apache Hadoop 文档中的 [YARN 默认设置](http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-common/yarn-default.xml)。


| 属性 | 默认 值 | 说明 | 
| --- | --- | --- | 
| yarn.nodemanager。 disk-health-checker.interval-ms | 120000 | 磁盘运行状况检查程序运行的频率（以秒为单位）。 | 
| yarn.nodemanager。 disk-health-checker。 min-healthy-disks | 0.25 | 启动新容器时必须处于正常状态的磁盘数量的最小比例。 NodeManager 这对应于 yarn.nodemanager.local-dirs（默认情况下，Amazon EMR 中的 `/mnt/yarn`）和 yarn.nodemanager.log-dirs（默认情况下，为 `/var/log/hadoop-yarn/containers`，与 Amazon EMR 中的 `mnt/var/log/hadoop-yarn/containers` 符号链接）。 | 
| `yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage` | 90.0 | 磁盘标记为故障后允许的磁盘空间利用率的最大百分比。值范围是 0.0 到 100.0。如果该值大于或等于 100，则会 NodeManager 检查磁盘是否已满。这适用于 `yarn-nodemanager.local-dirs` 和 `yarn.nodemanager.log-dirs`。 | 
| `yarn.nodemanager.disk-health-checker.min-free-space-per-disk-mb` | 0 | 磁盘上可供使用的最小空间。这适用于 `yarn-nodemanager.local-dirs` 和 `yarn.nodemanager.log-dirs`。 | 