hbase hbck -repair导致的rit问题

   1.问题开始    

    前段时间作者做了个hbase hbck。做了个检查,发现有几个region出现了reference文件残留问题。具体报错信息如下,我只截取其中的一条错误:

ERROR: Found lingering reference file hdfs://hacluster/hbase4/data/default/DPIQUERY_20171113/91c1225d81b1e82e2e7e645a3488aa59/F/3f7f9c436845499eaea025965d6528e3.75b81cdf8bd8e218f581dc274423be1c。

     reference文件作用:region达到一定条件后,会开始分裂。但此时不是真的分裂,只是创建两个region,并放上父region对应hfile的对应索引指向文件(reference文件)。当子region进行compact的时候,就是分解父region的hfile,拿到数据并且删除reference。

     2.问题出现

    于是,我针对那张表进行了hbase hbck -repair '表名',进行修复,问题解决。之后,过了一段时间做了hbase hbck,又有了其他的region出现了该问题。当时没去管,过了一段时间,又出现了reference文件残留问题,但是region却换了,为了一劳永逸,我直接执行了hbase hbck -repair。命令,不带任何表名。执行完成后,就出现了rit现象,有6个region处于rit状态。就是由于上面的问题,这下问题大了,业务侧反应数据无法入库,希望我们快速解决。

    3.解决问题

    这个时候只能针对这种现象,只能先去解决,再去具体分析。既然它是由于reference文件导致的,所以,只能通过具体的命令去解决,这个时候,尝试了命令, hbase hbck -fixReferenceFiles '表名'。执行完成后,发现并没有解决问题,region还是处于rit状态。推测了下,可能是由于region状态没有及时更新,所以又用了下命令hbase hbck -fixAssignments '表名'。运行完成后,OK,问题解决。region处于正常状态,业务侧也能入库。

   4.问题分析

   分析了一下,该问题应该是split导致的,compact的时候会优先选择那些有reference的region去压缩,删除那些残留的reference文件。hbase hbck检查的时候,那些region应该刚刚分裂,没有经过compact,所以会出现reference文件的报错,但过了一段时间,经过compact,文件被删了。然后hbase hbck又发现了其他的刚分裂的region出现reference,所以问题不变但是region变了,最后得出,此为正常现象,除非该问题导致region处于rit状态。

   然后运行了一下hbase hbck -repair。hbase,发现运行完成后,还有reference文件残留(应该是刚出现的),hbase认为无法修复,所以该region显示成open fail。一直处于rit。

  5.后续讨论

   就该问题和别人讨论一下,可能是中了这两个jira了: https://issues.apache.org/jira/browse/HBASE-13331 和
https://issues.apache.org/jira/browse/HBASE-16527

   别人也提供了一种解决方案:一个region一个region来。查看该region的父region是否还在,如果该父region不存在,那么就删除子region中的reference文件,然后在hbase shell中,重新上线该region,具体命令为assign 'region名'。以上述问题开始中的错误为例,子region名为91c1225d81b1e82e2e7e645a3488aa59,父region名为75b81cdf8bd8e218f581dc274423be1c。所以去对应的hdfs目录中去找还有没有父region,如果没有,那么就删除子region目录中的索引文件,然后去hbase shell中进行assign '91c1225d81b1e82e2e7e645a3488aa59'。如果有该父region存在,那么就不能删除该索引文件,否则就会丢失数据。

    我的解决方案就是上述的3。问题解决中的解决方案,在解决过程中,发现这个命令无论带不带表名,它都会把其他的region也一并修复。

   6.总结

    该残留的reference文件问题,只要不产生rit,那么就是正常现象,因为compact的时候会修复的。另外,请慎用hbase hbck -repair命令,就算要用,请一定要带表名。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值