hbase因为公司机房意思断网时间长引起数据不一致,然而hbase在做数据一致性处理的过程中region丢失问题

前提,运维说公司机房网络遭遇施工,出现半小时网络中断

服务受影响,当网络恢复后,发现服务还不能恢复,查看日志有报hbase的一些异常,具体如下:

org.apache.hadoop.hbase.NotServingRegionException: org.apache.hadoop.hbase.NotServingRegionException: Region userinfo,,1500870428653.9e153748297702a1328d41aeef7fc39b. is not online on tw06292,16020,1507705880785  o.a.hadoop.hbase.client.AsyncProcess     : #42090621, waiting for some tasks to finish. Expected max=0, tasksInProgress=24

刚开始是认为是服务中断,hbase在做数据的矫正以及有些任务在处理,在这种情况下,hbase是不可用的,导致服务端设计hbase操作的接口都不能使用,服务器一直处于崩溃状态,通过hbase的web url检查发现,hbase集群的3个region server,只有一个regionServer中region的个数正常,其他两个regionserver 的region都是个位数,明显有region丢失情况,当时想不会数据丢失吧,后来想着把有问题的regionserver重启一下看看能不能恢复,重启之后region本来是各位数,直接变成0了,心想,不会这下数据全部丢了吧,那个着急的,后来查了一下资料,说数据丢失能够修复,查到这个命令;

hbase hbck -fix

就开始修复数据了,看着修复日志挺正常的,觉得有戏,整得意忘形呢,突然修复结束,提示有59个region损坏没法修复,懵逼了,具体日志如下

Exception in thread "main" java.io.IOException: 59 region(s) could not be checked or repaired.  See logs for detail


当时查询的解决方案还有个方案二是:

base-site.xml配置文件里面增加如下配置:

<property>   <name>hbase.regionserver.executor.openregion.threads</name> <value>100</value> 
反正也一起设置了,最后把整个hbase集群全部重启了一下,突然发现正常了,所有的region数量都恢复了,这下高兴的,但是还是有点懵逼,具体是刚才修复给弄好的,还是增加这个线程数100好的呢,修复提示59个region不能修复,这个线程数我认为只是加快数据处理速度,和数据丢失修复没关系,但是最终数据是恢复了,但是具体怎么好的,还是有点懵,在此记录一下,如果明确者,请在下面回复,以此请教。


下面的网上查找的资料片段,在此记录一下

3.1 【解决方案一】

最终在google上找到以下资料,跟我们出现的情况类似:

hbase-error-there-is-a-hole-in-the-region-chain

hbase-hbck-cant-fix-region-inconsistencies

照着链接上面的思路进行如下步骤:

1 ) 停掉hbase集群 
2)删除hbase在hdfs目录下所有表目录下的recovered.edits

eg :

hadoop fs -rm -R /hbase/data/default/SYSTEM.CATALOG/*/recovered.edits
hadoop fs -rm -R /hbase/data/default/SYSTEM.FUNCTION/*/recovered.edits
hadoop fs -rm -R /hbase/data/default/SYSTEM.SEQUENCE/*/recovered.edits
hadoop fs -rm -R /hbase/data/default/SYSTEM.STATS/*/recovered.edits
hadoop fs -rm -R /hbase/data/default/SYSTEM.CATALOG/*/recovered.edits
hadoop fs -rm -R /hbase/data/default/C_PICRECORD_IDX_COLLISION/*/recovered.edits
hadoop fs -rm -R /hbase/data/default/C_PICRECORD_IDX/*/recovered.edits
hadoop fs -rm -R /hbase/data/default/C_PICRECORD/*/recovered.edits
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

3)重启hbase集群,所有的region就都online了

注意,这种通过删除recovered.edits的方式来恢复集群,会丢失部分数据。

3.2【解决方案二】

在Google上面有人遇到了在使用phoenix本地索引的时候重启HBase集群后出现了跟我们类似的情况:

Can-phoenix-local-indexes-create-a-deadlock-after-an-HBase-full-restart

phoenix-local-indexes.html

根据上面的思路,我们需要在集群所有RegionServer的hbase-site.xml配置文件里面增加如下配置:

<property>   <name>hbase.regionserver.executor.openregion.threads</name> <value>100</value> 
</property>
 
 
  • 1
  • 2

然后重启HBase集群就可以了。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值