环境描述:ambari集群+hdfs+zookeeper+hbase
错误描述:hdfs 存在部分 corrupt replica blocks/missing blocks/under replicated blockes
Block Errors |
31 corrupt replica / 30 missing / 31 under replicated |
hbase存在大量的offline regin 和 少量missing region。
修复方法:
1、hdfs修复:
退出hdfs安全模式,不然可能namenode无法启动。
su fdfs
hadoop dfsadmin -safemode leave
查看report报告
hadoop dfsadmin -report
Under replicated blocks 副本数少于指定副本数的block数量
Blocks with corrupt replicas 存在损坏副本的block的数据
Missing blocks 丢失block数量
核心步骤1:更改已经上传文件的副本数,修复Missing blocks
hadoop fs -setrep -R 3 /
核心步骤2:删除已损坏的block
hdfs fsck -delete
至此,hdfs修复,查看ui,上述3个指标应该都为0.
2、hbase修复:
尝试传统的修复方法:
./hbase hbck -fixMeta
./hbase hbck -fixAssignments
以上指令无效,并报错如下
ERROR: There is a hole in the region chain between TestTable,2,1415170922328.3c1b2a210888171d142059912e2faba1. and TestTable,3,1415171044919.da852e5b0034a2ca83f6966280454b4a. You need to create a new .regioninfo and region dir in hdfs to plug the hole.
核心步骤1:
disable工作空间下所有的表,并停止habse服务
进入zookeeper删除/hbase节点
#进入zkcli
sh zkCli.sh
#查看目录znode
ls /
#删除指定znode
rmr /hbase
删除hdfs下各个hbase表的recovered.edits文件
hadoop fs -rm -R /hbase/data/default/TABLE_NAME/*/recovered.edits
删除WALs下所有的日志
hadoop fs -rmr /hbase/WALs/*
删除Meta表下的recovered.edits文件
开启habse服务,enable所有的表,执行如下修复指令:
./hbase hbck -repair
查看webui,应该一切正常了,测试hbase表的读写,所有数据恢复,整个过程会丢失少量的数据,原因是hdfs删除了坏的无备份的block(默认为3备份),至此,整个修复完成。