HDFS故障:Namenode安全模式:The reported blocks 12xx needs additional xx blocks to reach the threshold 0.999

1 CDH环境,HDFS无法做任何操作,报错信息连接Namenode节点失败,处于safemode。

2 查看HDFS 实例,红色警告,不能创建/tmp/.cloudera.....

3 查看 namenode日志:     /var/log/hadoop-hdfs/hadoop-cmf-hdfs-NAMENODE-cdh00.log.out

报错信息:

org.apache.hadoop.ipc.RetriableException: org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot create directory /tmp/hive/hive/8d99a26e-35a2-4416-9070-0bb0a5db1c51. Name node is in safe mode.
The reported blocks 505 needs additional 1 blocks to reach the threshold 0.9990 of total blocks 507.
The number of live datanodes 3 has reached the minimum number 1. Safe mode will be turned off automatically once the thresholds have been reached. NamenodeHostName:cdh00
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkNameNodeSafeMode(FSNamesystem.java:1439)
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirs(FSNamesystem.java:3100)
        at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.mkdirs(NameNodeRpcServer.java:1123)
        at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.mkdirs(ClientNamenodeProtocolServerSideTranslatorPB.java:696)
        at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)
        at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:523)
        at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:991)
        at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:869)
        at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:815)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:422)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1875)
        at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2675

4 分析:

大体意思是DataNode给NameNode汇报了XXXXX个block块,但是还需要XX个block块 才能达到总共所需要的yyyyy个block块的0.99990.       

 data块丢失超过设置的丢失百分比,系统自动进入安全模式

5 故障处理,比较粗暴的方式,删除故障分区:

                              步骤 1     执行命令退出安全模式:sudo -u hdfs  hadoop dfsadmin -safemode leave

                              步骤 2     执行健康检查,删除损坏掉的block。()

                                 sudo -u hdfs   hdfs fsck  /  -delete

6 生产环境一般考虑先恢复: 找到数据块的位置和丢失的数据信息

  (0) 找到大约的文件目录, 进行hdfs文件检查

   sudo -u hdfs hdfs fsck /tmp

  此命令会列出/tmp目录检查,会列出受损的 文件及路径

 (1)查看对应文件所在的block以及分区信息:    sudo -u hdfs hdfs fsck  /tmp/test.log -files -blocks -locations

     此命令会列出文件下所有的block及所在节点。


(2)sudo -u hdfs  hdfs debug recoverLease [-path <path>] [-retries <num-retries>] 用这个命令恢复上面路径丢失的数据块.

      最后一个参数是重试次数  默认1

   -path必须是文件,不是目录。  具体文件,可以按照步骤1来分析

    hdfs debug recoverLease  -path /tmp/test.log 

注:如果某个文件的某个数据块总共2个,但是2个都丢失了。这时可以判定未文件损坏了。  上述恢复命令也是无法恢复。 

(3) 处理无法恢复的文件

hdfs fsck -move <file_name>  移动损坏的文件到/lost + found

hdfs fsck -delete <file_name> 从HDFS删除损坏的文件

其它情况: 如果丢失的数据块未达到指定的比例。一般集群不会进入安全模式,集群的操作不会受影响,但是会报错:常见报错信息如下:

 附录:

HDFS 管理常见命令:

1  hdfs dfsadmin -report

 检查namenode datanode整体磁盘使用情况. 

一般使用sudo -u hdfs hdfs dfsadmin -report  ,以超级管理员执行。

2  hdfs  fsck /                    文件系统目录或文件检查命令。           可以检查损坏或丢失的数据块和文件信息以及副本信息。

sudo -u hdfs hdfs fsck /

最好不要扫描根目录, 文件太大,扫描太慢。  考虑二级或三级目录更快。

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值