码迷,mamicode.com
首页 > 其他好文 > 详细

Hbase split的过程以及解发条件

时间:2014-09-10 10:52:00      阅读:266      评论:0      收藏:0      [点我收藏+]

标签:hbase   split   

一、Split触发条件

 

1、  有任一一个Hfile的大小超过默认值10G时,都会进行split

 bubuko.com,布布扣 

2、  达到这个值不在拆分,默认为int_max,不进行拆分

 

 bubuko.com,布布扣

 

3、compaction时,如果compact的store的大小超过了,bubuko.com,布布扣则进行split

 

 bubuko.com,布布扣

 

 

4、 flush之前会检测区域中HStoreFile数目是否超过hbase.hstore.blockingStoreFiles,如果超过且没有等待超时会调用CompactSplitThread.requestSplit(HRegion)

 

bubuko.com,布布扣

 

5、 flush之后会调用HRegion.checkSplit()检测是否需要split,如果需要则调用CompactSplitThread.requestSplit(HRegion)

 bubuko.com,布布扣

 

6、人工触发

 bubuko.com,布布扣

二、Split过程

 

1、启动一个CompactSplitThresd线程

bubuko.com,布布扣

2、 SplitRequest.run 

bubuko.com,布布扣

首先,实例化一个事务:在HDFS上的parent’s region 目录下创建一个.splits目录

 bubuko.com,布布扣

其次,实例化两个RegionInfo: hri_a和 hri_b,赋予key的起始结束值,根据给定的splitkey 

bubuko.com,布布扣

然后,执行execute方法:

bubuko.com,布布扣

(1)createDaughters  

bubuko.com,布布扣

bubuko.com,布布扣

bubuko.com,布布扣

bubuko.com,布布扣

每个Reference文件管理原始文件一半的数据。Reference文件名字是一个ID,它使用被参考的Region的名字的Hash作为前缀。例如:1278437856009925445.3323223323Reference文件只含有非常少量的信息,这些信息包括被分割的原始RegionKey以及这个文件管理前半段还是后半段。HBase使用HalfHFileReader类来访问Reference文件并从原始数据文件中读取数据

 bubuko.com,布布扣

bubuko.com,布布扣

 Offline parent in meta.  向.META.表Put Split的信息

bubuko.com,布布扣

bubuko.com,布布扣

(2)openDaughter--DaughterOpener-- DaughterOpener.run()--openDaughterRegion--openHRegion

bubuko.com,布布扣

openDaughter--postOpenDeployTasks

bubuko.com,布布扣

addToOnlineRegions  // Should add it toOnlineRegions 

bubuko.com,布布扣

(3) transitionZKNode  :Finish off splittransaction, transition the zknode  ,更新Split的状态 (之后由Master来处理,CatalogJanitor 来清理多余文件夹) 

bubuko.com,布布扣

 

 

 

Hbase split的过程以及解发条件

标签:hbase   split   

原文地址:http://blog.csdn.net/smarthhl/article/details/39177747

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!