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

1 分钟阅读
0

我的 Amazon EMR 任务失败,并显示类似于以下内容的错误消息: ExecutorLostFailure (执行程序 12 因其中一个正在运行的任务而退出) 原因:容器标记为失败: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 服务。

相关信息

集群因 NO_SLAVE_LEFT 和核心节点 FAILED_BY_MASTER 而终止

为什么我的 Amazon EMR 集群的核心节点磁盘空间不足?

AWS 官方
AWS 官方已更新 3 年前