1、 有任一一个Hfile的大小超过默认值10G时,都会进行split
2、 达到这个值不在拆分,默认为int_max,不进行拆分
![技术分享](http://img.blog.csdn.net/20140910101001725?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc21hcnRoaGw=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
3、compaction时,如果compact的store的大小超过了,
则进行split
![技术分享](http://img.blog.csdn.net/20140910101051895?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc21hcnRoaGw=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
4、 flush之前会检测区域中HStoreFile数目是否超过hbase.hstore.blockingStoreFiles,如果超过且没有等待超时会调用CompactSplitThread.requestSplit(HRegion)
![技术分享](http://img.blog.csdn.net/20140910101118727?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc21hcnRoaGw=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
5、 flush之后会调用HRegion.checkSplit()检测是否需要split,如果需要则调用CompactSplitThread.requestSplit(HRegion)
![技术分享](http://img.blog.csdn.net/20140910101131222?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc21hcnRoaGw=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
6、人工触发
![技术分享](http://img.blog.csdn.net/20140910101203920?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc21hcnRoaGw=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
二、Split过程
1、启动一个CompactSplitThresd线程
![技术分享](http://img.blog.csdn.net/20140910101221954?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc21hcnRoaGw=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
2、 SplitRequest.run
![技术分享](http://img.blog.csdn.net/20140910101243092?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc21hcnRoaGw=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
首先,实例化一个事务:在HDFS上的parent’s region 目录下创建一个.splits目录
![技术分享](http://img.blog.csdn.net/20140910101301375?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc21hcnRoaGw=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
其次,实例化两个RegionInfo: hri_a和 hri_b,赋予key的起始结束值,根据给定的splitkey
![技术分享](http://img.blog.csdn.net/20140910101318363?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc21hcnRoaGw=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
然后,执行execute方法:
![技术分享](http://img.blog.csdn.net/20140910101840562?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc21hcnRoaGw=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
(1)createDaughters
![技术分享](http://img.blog.csdn.net/20140910102112401?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc21hcnRoaGw=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![技术分享](http://img.blog.csdn.net/20140910102141636?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc21hcnRoaGw=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![技术分享](http://img.blog.csdn.net/20140910102155613?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc21hcnRoaGw=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![技术分享](http://img.blog.csdn.net/20140910102209170?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc21hcnRoaGw=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
每个Reference文件管理原始文件一半的数据。Reference文件名字是一个ID,它使用被参考的Region的名字的Hash作为前缀。例如:1278437856009925445.3323223323。Reference文件只含有非常少量的信息,这些信息包括被分割的原始Region的Key以及这个文件管理前半段还是后半段。HBase使用HalfHFileReader类来访问Reference文件并从原始数据文件中读取数据
![技术分享](http://img.blog.csdn.net/20140910102059171?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc21hcnRoaGw=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![技术分享](http://img.blog.csdn.net/20140910102329962?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc21hcnRoaGw=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
Offline parent in meta. 向.META.表Put Split的信息
![技术分享](http://img.blog.csdn.net/20140910102349696?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc21hcnRoaGw=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![技术分享](http://img.blog.csdn.net/20140910102402457?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc21hcnRoaGw=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
(2)openDaughter--DaughterOpener-- DaughterOpener.run()--openDaughterRegion--openHRegion
![技术分享](http://img.blog.csdn.net/20140910102816535?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc21hcnRoaGw=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
openDaughter--postOpenDeployTasks
![技术分享](http://img.blog.csdn.net/20140910102446812?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc21hcnRoaGw=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
addToOnlineRegions // Should add it toOnlineRegions
![技术分享](http://img.blog.csdn.net/20140910102858280?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc21hcnRoaGw=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
(3) transitionZKNode :Finish off splittransaction, transition the zknode ,更新Split的状态 (之后由Master来处理,CatalogJanitor 来清理多余文件夹)
![技术分享](http://img.blog.csdn.net/20140910102703531?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc21hcnRoaGw=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)