HBase数据丢失恢复

关于HBase数据丢失恢复,可以详细看一下华为的这篇文章http://support.huawei.com/ecommunity/bbs/10242725.html,里面不止对原理进行讲解,而且有具体的场景演示和解决方案。

今天hbase的一台region server挂掉,重启后进行查询,发现有些纪录查询失败,报Region is not online的异常。

1
2
3
4
5
org.apache.hadoop.hbase.ipc.RemoteWithExtrasException(org.apache.hadoop.hbase.NotServingRegionException): org.apache.hadoop.hbase.NotServingRegionException: Region HJSTATE,9223370681872375807_199999,1459388712948.cfc561817b17589e451b2d585105580a. is not online on hbaseserver1,60020,1473686838114
at org.apache.hadoop.hbase.regionserver.HRegionServer.getRegionByEncodedName(HRegionServer.java:2920)
at org.apache.hadoop.hbase.regionserver.RSRpcServices.getRegion(RSRpcServices.java:1053)
at org.apache.hadoop.hbase.regionserver.RSRpcServices.scan(RSRpcServices.java:2385)
...

首先检查了HDFS是否存在数据丢失的情况,

1
hdfs fsck -list-corruptfileblocks

没有发现有坏块。

然后检查hbase集群状态,

1
hbase hbck

果然出现一些ERROR信息,进行修复,

1
hbase hbck -repair

HBase某些正常流程(Region split, Region assign等),会导致HBCK检查出集群状态为异常。要确定集群异常,最好连续执行HBCK,且每次异常都相同,才能确定集群出现异常。

hbck命令详情查询官网http://hbase.apache.org/book.html#hbck.in.depth