文档

NameNode启动后无法退出safemode

更新时间:

本文介绍当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参数的值。