Hadoop NameNode safemode

最近在应用Hadoop集群时,碰上了任务提交集群后,长时间卡在accepted状态,申请资源困难的情况,经过一系列的日志分析,状况排查,才发现是由于NameNode出现过主备切换导致,之前的NameNode主节点由于某种原因宕掉导致主备切换发生,刚好时间卡在业务高峰期,部分数据块未同步(或其他原因,从日志中看应该是无法与JournalNode集群交互,猜测可能网络异常,但未找到相关日志信息),NameNode切换后被迫进入安全模式后就再没出来,导致后续任务越来越难申请到资源,集群虽然完好,业务差点崩塌……

 

宕机原因尚待分析,可业务的立即恢复要求度更高,那NameNode安全模式就成了最重要的问题。

经过一番搜索,找到了右侧的博文:《Hadoop安全模式详解及配置》

简单来说,安全模式下的HDFS只支持元数据的操作读取,不支持文件的创建、删除等操作,同时会对数据块进行大量校验,导致资源的分配和申请耗时远超预期。

因此在业务紧急要求恢复的时候,可以尝试将以下两个参数调低,使安全模式尽快结束:

dfs.namenode.replication.min——满足需要的最小副本数
dfs.namenode.safemode.threshold-pct——集群中满足正常配置的数据块比例
<property>
  <name>dfs.namenode.replication.min</name>
  <value>1</value>
  <description>Minimal block replication. 
  </description>
</property>

<property>
  <name>dfs.namenode.safemode.threshold-pct</name>
  <value>0.999f</value>
  <description>
    Specifies the percentage of blocks that should satisfy the minimal
    replication requirement defined by dfs.namenode.replication.min.
    Values less than or equal to 0 mean not to wait for any particular
    percentage of blocks before exiting safemode.
    Values greater than 1 will make safe mode permanent.
  </description>
</property>


如果是为了防止某些异常数据导致始终校验不过的情况,可以尝试将上面的dfs.namenode.safemode.threshold-pct参数调为0或比0小的值后重启NameNode,这样永远不会进入安全模式;或者使用以下命令手动退出安全模式:

hadoop fs –safemode leave

 

posted on 2015-07-13 19:21  taisenki  阅读(1294)  评论(0编辑  收藏  举报

导航