关于HBase0.94版本在split region后META Scanner和CatalogJanitor并发操作时存在的问题

我们大家都知道,Hbase Region在达到一定大小的时会自动split为两个daughter region,在创建daughters时,会更改META表父region记录对应的regioninfo信息(在info family中增加offline列=true,splitA=DaughterA,splitB=DaughterB),并且在META表为daughters中增加两行记录。此时daughters region的hdfs storeFile并不存在,而是只包含对parent region 的引用,只有在做major compact时,才真正为两个daughter创建storeFile。

参见这个方法

MetaEditor. offlineParentInMeta(CatalogTrackercatalogTracker, HRegionInfo parent, final HRegionInfo a, final HRegionInfo b)


Master有个后台线程catalog chore 会定时扫描META表,在fullscan过程中,发现有的parent region已经可以clean(daughter region已经不再引用parent region了),那么就调用

CatalogJanitor.cleanParent(final HRegionInfo parent,Result rowContent)做清理工作。

在清理的过程中,先clean parent中的两个column splitA和splitB(delete daughter reference),后清理parent中HDFS中的region storeFile和META表中对应parent的当前row(delete parent META entry),其实第一步是多余的,只需要第二部即可,为什么需要这么做,参见下面的分析:

假如在清理的过程中,同时有一个META Scanner的scan 到parent region 中,此时发现parent region split(info:split=true)了,但是在转向读取daughter region前,CatalogJanitor已经把parent和daughter之间的引用关系(parent region row中的info:splitA和info:splitB)给删除了,所以就会出现并发问题,

JIRA中HBASE-8505的对这个也有描述

References to split daughters should not be deleted separately from parent META entry



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值