Hbase split的过程以及解发条件

本文详细介绍了HBase中Split机制的触发条件与执行过程。Split可在HFile大小超过阈值、compaction操作、flush前后及人工干预时发生。Split过程涉及创建.splits目录、实例化RegionInfo、Reference文件管理等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Split触发条件

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

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

3、compaction时,如果compact的store的大小超过了,则进行split

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

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

6、人工触发

二、Split过程

1、启动一个CompactSplitThresd线程


2、SplitRequest.run


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

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


然后,执行execute方法:


(1)createDaughters



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


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



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


openDaughter--postOpenDeployTasks


addToOnlineRegions // Should add it toOnlineRegions


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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值