shuffle文件损坏导致nodemanager重启失败

本文记录了一次CDH集群中数据节点nodemanager出现失联现象,并深入分析了故障原因。经排查,该问题由内存溢出引起,通过调整配置及清理shuffle文件后,成功解决了NM重启失败的问题。

现象

CDH集群,生产环境发现一台数据节点nodemanager失联,重启失败。尝试重启整个yarn,结果导致所有nodemanager失联不可用。

问题原因

最开始的一个NM失联是因为内存溢出,导致NM挂了

JAVA_HOME=/usr/java/jdk1.8.0_181
using /usr/java/jdk1.8.0_181 as JAVA_HOME
using 6 as CDH_VERSION
using /opt/cloudera/parcels/CDH-6.2.1-1.cdh6.2.1.p0.1425774/lib/hadoop-yarn as CDH_YARN_HOME
using /opt/cloudera/parcels/CDH-6.2.1-1.cdh6.2.1.p0.1425774/lib/hadoop-mapreduce as CDH_MR2_HOME
using /var/run/cloudera-scm-agent/process/5742-yarn-NODEMANAGER as CONF_DIR
CONF_DIR=/var/run/cloudera-scm-agent/process/5742-yarn-NODEMANAGER
CMF_CONF_DIR=
java.lang.OutOfMemoryError: Java heap space
Dumping heap to /tmp/yarn_yarn-NODEMANAGER-cb40d8036dd59b6cc2f0d7748f7561ce_pid440050.hprof ...
Heap dump file created [3141289255 bytes in 18.481 secs]
#
# java.lang.OutOfMemoryError: Java heap space
# -XX:OnOutOfMemoryError="/opt/cloudera/cm-agent/service/common/killparent.sh"
#   Executing /bin/sh -c "/opt/cloudera/cm-agent/service/common/killparent.sh"...
2022年 08月 10日 星期三 08:56:18 CST
JAVA_HOME=/usr/java/jdk1.8.0_181
using /usr/java/jdk1.8.0_181 as JAVA_HOME
using 6 as CDH_VERSION
using /opt/cloudera/parcels/CDH-6.2.1-1.cdh6.2.1.p0.1425774/lib/hadoop-yarn as CDH_YARN_HOME
using /opt/cloudera/parcels/CDH-6.2.1-1.cdh6.2.1.p0.1425774/lib/hadoop-mapreduce as CDH_MR2_HOME
using /var/run/cloudera-scm-agent/process/5742-yarn-NODEMANAGER as CONF_DIR
CONF_DIR=/var/run/cloudera-scm-agent/process/5742-yarn-NODEMANAGER
CMF_CONF_DIR=
java.lang.OutOfMemoryError: Java heap space
Dumping heap to /tmp/yarn_yarn-NODEMANAGER-cb40d8036dd59b6cc2f0d7748f7561ce_pid450025.hprof ...
Heap dump file created [3141287223 bytes in 17.360 secs]

正常情况下,此时重启NM即可解决。那为什么这次重启失败呢?
咨询cloudera官方,将NM的日志级别调为debug,发现Node Manager 启动时做recovery出了问题,推测可能是shuffle文件的问题

解决办法

删除数据节点上所有的shuffle文件:

rm -rf /var/lib/hadoop-yarn/yarn-nm-recovery/nm-aux-services/mapreduce_shufflemapreduce_shuffle_state/
rm -rf /var/lib/hadoop-yarn/yarn-nm-recovery/nm-aux-services/spark_shuffle/registeredExecutors.ldb/
rm -rf /var/lib/hadoop-yarn/yarn-nm-recovery/yarn-nm-state/*

重启成功!
同样的操作,在其他NM节点上都进行一遍,所有的NM都恢复正常。

分析总结

recovery只有在重启的时候才会进行,所以平时都正常运行没有问题。一旦进行重启操作,就会触发这个问题,导致重启失败。

PS:遇到yarn的NM问题可以去以下几个地方看看日志:

  • /var/run/cloudera-scm-agent/process/*-yarn-NODEMANAGER/logs
  • /var/log/hadoop-yarn
NodeManager 启动失败通常是由于配置错误、依赖服务未启动或其他环境问题引起的。以下是可能导致 NodeManager 启动失败的一些常见原因及解决办法: 1. **YARN 配置文件问题** 检查 `yarn-site.xml` 文件中的配置是否正确,特别是以下关键属性: - `yarn.nodemanager.resource.memory-mb`: 分配给 NodeManager 的内存大小。 - `yarn.nodemanager.local-dirs`: 本地磁盘存储路径。 - `yarn.nodemanager.log-dirs`: 日志存储路径。 确保所有指定的目录都存在,并且 Hadoop 用户有权限访问它们。 2. **ResourceManager 未运行** NodeManager 要求 ResourceManager 已经正常启动并正在监听网络请求。如果 ResourceManager 未运行,则 NodeManager 将无法注册到集群中。可以尝试通过命令检查状态: ```bash yarn resourcemanager -status ``` 3. **端口冲突** 默认情况下,NodeManager 使用 8040 和 8042 等端口进行通信和监控。如果有其他程序占用了这些端口,将导致启动失败。可以用以下命令检测端口占用情况: ```bash netstat -anp | grep <port> ``` 如果发现端口被占用,可以选择修改配置文件中的端口号或停止占用进程。 4. **日志分析** 查看 NodeManager 的详细日志信息可以帮助定位问题所在,默认的日志位置通常位于 `${HADOOP_LOG_DIR}/yarn-yarn-nodemanager-*.log` 中。重点查找报错关键字如 “FATAL” 或者异常堆栈追踪记录。 5. **系统资源不足** 当服务器物理内存过低或者 CPU 占用过高时也可能阻止 NodeManager 成功启动。建议查看当前系统的负载状况以及可用内存总量。 6. **SELinux/Firewall 设置限制** SELinux 或防火墙规则可能会阻碍 NodeManager 正常工作。临时关闭两者测试一下是否解决问题: ```bash setenforce 0 # 关闭SELinux systemctl stop firewalld.service # 停止firewall ``` 完成上述排查步骤之后再重新尝试启动 NodeManager 并观察结果。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值