更新时间:2024-10-11 GMT+08:00
内存不足导致HDFS启动失败
问题背景与现象
重启HDFS后,HDFS的状态是Bad,且NameNode实例状态常常异常,并且花很久没有退出安全模式。
原因分析
- 在NameNode运行日志(/var/log/Bigdata/hdfs/nn/hadoop-omm-namendoe-XXX.log)中搜索“WARN”,可以看到有大量时间在垃圾回收,如下例中耗时较长63s。
2017-01-22 14:52:32,641 | WARN | org.apache.hadoop.util.JvmPauseMonitor$Monitor@1b39fd82 | Detected pause in JVM or host machine (eg GC): pause of approximately 63750ms GC pool 'ParNew' had collection(s): count=1 time=0ms GC pool 'ConcurrentMarkSweep' had collection(s): count=1 time=63924ms | JvmPauseMonitor.java:189
- 分析NameNode日志“/var/log/Bigdata/hdfs/nn/hadoop-omm-namendoe-XXX.log”,可以看到NameNode在等待块上报,且总的Block个数过多,如下例中是3629万。
2017-01-22 14:52:32,641 | INFO | IPC Server handler 8 on 25000 | STATE* Safe mode ON. The reported blocks 29715437 needs additional 6542184 blocks to reach the threshold 0.9990 of total blocks 36293915.
- 打开Manager页面,查看NameNode的GC_OPTS参数配置如下:
图1 查看NameNode的GC_OPTS参数配置
- NameNode内存配置和数据量对应关系参考表1。
表1 NameNode内存配置和数据量对应关系 文件对象数量
参考值
10,000,000
“-Xms6G -Xmx6G -XX:NewSize=512M -XX:MaxNewSize=512M”
20,000,000
“-Xms12G -Xmx12G -XX:NewSize=1G -XX:MaxNewSize=1G”
50,000,000
“-Xms32G -Xmx32G -XX:NewSize=2G -XX:MaxNewSize=3G”
100,000,000
“-Xms64G -Xmx64G -XX:NewSize=4G -XX:MaxNewSize=6G”
200,000,000
“-Xms96G -Xmx96G -XX:NewSize=8G -XX:MaxNewSize=9G”
300,000,000
“-Xms164G -Xmx164G -XX:NewSize=12G -XX:MaxNewSize=12G”
解决办法
- 按照规格修改NameNode的内存参数,如这里3600万block,将内存参数调整为“-Xms32G -Xmx32G -XX:NewSize=2G -XX:MaxNewSize=3G”。
- 重启一个NameNode,确认该NameNode可以正常启动。
- 重启另一个NameNode,确认页面状态恢复。
父主题: 使用HDFS