我的 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.xml 的 yarn.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 集群的核心节点磁盘空间不足?