如何解决 Amazon EMR 中的“Exit status: -100.Diagnostics: Container released on a *lost* node”错误?

上次更新时间:2019 年 12 月 9 日

我的 Amazon EMR 作业失败了,并显示一条与以下类似的错误消息:

ExecutorLostFailure (executor 12 exited caused by one of the running tasks) Reason: Container marked as failed: container_1572839353552_0008_01_000002 on host: ip-xx-xxx-xx-xx Exit status: -100. Diagnostics: Container released on a *lost* node

这意味着什么,我该怎样解决呢?

简短描述

发生此错误的原因通常是由于磁盘空间利用率高导致核心节点或任务节点被终止,或者由于长时间的 CPU 利用率高或可用内存低导致节点无响应。本文重点关注磁盘空间问题。

当核心节点或任务节点磁盘(例如 /mnt 或/mnt1)的磁盘利用率超过 90% 时,该磁盘将被视为运行不正常。如果一个节点中运行正常的磁盘少于 25%,YARN ResourceManager 会逐步停用该节点。要解决此问题,请增加 EMR 集群的 Amazon Elastic Block Store (Amazon EBS) 容量。您可以在启动新集群时或修改正在运行的集群时执行此操作。

解决方法

确定根本原因

要确定导致错误的原因,请检查 Amazon CloudWatch 中的下列 EMR 集群指标

  • MR 节点不正常:如果此指标显示某个节点运行不正常,则问题在于磁盘空间不足。
  • MR 节点丢失:如果此指标显示某个节点丢失,则表示某个节点因硬件故障丢失,或者由于 CPU 或内存利用率高而无法访问该节点。

请使用以下任意一种方法来因磁盘空间不足导致的节点丢失错误。

新集群:增加 EBS 容量

要在启动 EMR 集群时增加 EBS 容量,请选择更大的 Amazon Elastic Compute Cloud (Amazon EC2) 实例类型。越大的 EC2 实例包含越多的 EBS 存储容量。有关更多信息,请参阅实例的默认 EBS 存储。(不论您选择哪种实例类型,您还可以在创建集群时修改卷大小或添加更多卷。)

新集群或正在运行的集群:增加核心节点或任务节点数量

正在运行的集群:增加 EBS 卷

要将更多的 EBS 卷挂载到正在运行的集群:

1.    如果使用更大的 EBS 卷仍无法解决问题,请将更多的 EBS 卷挂载到核心节点和任务节点。

2.    格式化并挂载要挂载的卷。请务必使用正确的磁盘编号(例如,/mnt1 或 /mnt2 而不是 /data)。

3.    使用 SSH 连接到节点

4.    在 /etc/hadoop/conf/yarn-site.xmlyarn.nodemanager.local-dirs 属性内部添加路径 /mnt1/yarn。示例:

<property>
    <name>yarn.nodemanager.local-dirs</name>
    <value>/mnt/yarn,/mnt1/yarn</value>
</property>

5.    重启 NodeManager 服务:

sudo stop hadoop-yarn-nodemanager
sudo start hadoop-yarn-nodemanager

6.    启用终止保护

如果磁盘空间问题仍然存在,请尝试以下操作:

  • 移除不必要的文件。
  • 将磁盘利用率阈值从 90% 增加到 99%。为此,请修改所有节点上 yarn-default.xml 中的 yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage 属性。然后重新启动 hadoop-yarn-nodemanager 服务。