集群因 NO_SLAVE_LEFT 和核心节点 FAILED_BY_MASTER 而终止
通常,发生这一现象是因为禁用了终止保护,而且所有核心节点都超过了 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
状态,并且集群最终会终止。
最佳实践和建议
为集群硬件配置充足的存储容量
创建集群时,请确保有足够的核心节点并且每个节点都为 HDFS 提供足够的实例存储空间和 EBS 存储卷。有关更多信息,请参阅计算集群的必需的 HDFS 容量。您也可以手动或使用 Auto Scaling 功能,将核心实例添加到现有实例组。新实例与实例组中的其它实例具有相同的存储配置。有关更多信息,请参阅使用集群扩展。
启用终止保护
启用终止保护。这样一来,如果核心节点被列入拒绝名单,您可以使用 SSH 连接到关联的 Amazon EC2 实例进行故障排查并恢复数据。如果启用终止保护,请注意,Amazon EMR 不会将该 Amazon EC2 实例替换为新实例。有关更多信息,请参阅使用终止保护。
为 MRUnhealthyNodes CloudWatch 指标创建警报
此指标会报告其中报告了 UNHEALTHY
状态的节点的数量。此指标等同于 YARN 指标 mapred.resourcemanager.NoOfUnhealthyNodes
。您可以为此警报设置通知,在节点维持不正常状态到达 45 分钟计时之前提醒您。有关更多信息,请参阅使用 CloudWatch 指标监控 Amazon EMR 指标。
使用 yarn-site 调整设置
下面的设置可以根据您的应用程序要求进行调整。例如,您可能需要通过提高 yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage
的值,来提高节点报告为 UNHEALTHY
的磁盘利用率阈值。
在使用 yarn-site
配置分类创建集群时,您可以设置这些值。有关更多信息,请参阅《Amazon EMR 版本指南》中的配置应用程序。您还可以使用 SSH 连接到与核心节点关联的 Amazon EC2 实例,然后使用文本编辑器在 /etc/hadoop/conf.empty/yarn-site.xml
添加值。完成更改后,您必须按照以下方式重新启动 hadoop-yarn-nodemanager。
重要
当您重启 NodeManager 服务时,活动的 YARN 容器会被终止,除非在您创建集群时使用 yarn-site
配置分类将 yarn.nodemanager.recovery.enabled
设为 true
。您还必须使用 yarn.nodemanager.recovery.dir
属性指定存储容器状态的目录。
sudo /sbin/stop hadoop-yarn-nodemanager sudo /sbin/start hadoop-yarn-nodemanager
有关当前 yarn-site
属性和默认值的更多信息,请参阅 Apache Hadoop 文档中的 YARN 默认设置
属性 | 默认值 | 描述 |
---|---|---|
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 中的 |
|
90.0 |
磁盘标记为故障后允许的磁盘空间利用率的最大百分比。值范围是 0.0 到 100.0。如果值大于或等于 100,则 NodeManager 会检查整个磁盘。这适用于 |
|
0 |
磁盘上可供使用的最小空间。这适用于 |