您的位置:首页 > 其它

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

2013-12-22 11:31 417 查看
我们大家都知道,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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐