关于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
参见这个方法
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
相关文章推荐
- 关于“打开项目**时发生问题,尝试退出并重新启动应用程序。如果问题仍然存在,则可能是由于正在使用不支持的项目版本,或者项目文件可能损坏”的问题的解决办法。
- 关于在.Net开发中使用Sqlite的版本选择问题
- 关于jdk的版本不兼容问题与对tomcat的影响
- 关于Ubuntu”系统的网络服务与此版本的网络管理器不兼容“问题的解决方案
- 关于在电脑上同时安装多个IE版本的问题
- 关于EXCEL数据导入到SQLSERVER中字段存在NULL的问题
- 关于 maven 私服删除版本恢复的问题
- Android——UI篇:关于Fragment的构造参数打包release版本报错的问题
- 关于ios8版本录音跳转时上方闪红条跳转后self.view上移问题
- 关于Mysql事务REPEATABLE_READ隔离级别下多版本并发控制(MVCC)重复读产生的坑的你踩过么?
- 关于开关电源PCB设计中存在的问题
- 关于android studio 由于版本问题导致低版本studio项目无法导入高版本的studio的项目中。
- 关于VS2008 中添加成员变量提示 此网站的某个加载项运行失败 请检查“Internet选项”中的安全设置是否存在潜在冲突 问题解决办法
- OSX10.9.3 eclipse关于JAVA版本的问题
- 关于cocos2dx-lua版本中游戏时间显示问题
- HBase版本匹配问题:HBase-0.90.4与Hadoop-0.20.203.0
- 关于Python中并发调用管道执行外部程序的问题解决
- 关于xcode低版本安装到mac10.7以上系统的问题。
- 关于windows 7 Build 6933 32Bit版本BT下载文件的问题!
- 关于交叉工具链版本问题