本文介绍当NameNode启动后,NameNode无法退出safemode状态的原因及解决方案。
具体报错
NameNode日志或者HDFS WebUI上出现以下报错信息,将无法退出safemode,导致HDFS服务整体基本不可用。
Safemode is ON.The reported blocks xxx needs addition ablocks to reach the threshold 0.9990 of total blocks yyy
问题原因
该问题通常是由于DataNode上报的数据块未达到总量的阈值比例(默认为0.999f),导致NameNode无法退出safemode。首先需要确认所有DataNode是否已正常启动,如果DataNode进程没有问题,问题可能出在以下两个方面:
运维不当导致数据块丢失,无法达到阈值比例。如果出现此类情况,NameNode将无法自动退出safemode。
DataNode块上报时间过长,多发生于大量DataNode重启或NameNode重启(全部重启,非正常HA切换)等大量HDFS服务进程发生异常重启的情况。在此类情况下,DataNode需要触发全量块上报,NameNode接受到的数据块达到阈值后才能自动退出safemode。整个恢复过程的时长取决于数据块的数量。
解决方案
方案一:通过hdfs命令手动退出safemode。
hdfs dfsadmin -safemode leave
方案二:通过修改以下配置项适当调低阈值比例,并在EMR控制台目标集群HDFS服务的状态页面,通过单击NameNode组件操作列中的重启,来使NameNode生效。
dfs.namenode.safemode.threshold-pct=0.9f (默认值为0.999f)
说明上述参数值
0.9f
只是举例,实际使用中请您根据具体情况来调整dfs.namenode.safemode.threshold-pct参数的值。
文档内容是否对您有帮助?