你好,游客 登录 注册 搜索
背景:
阅读新闻

Hbase split的过程以及解发条件

[日期:2016-01-18] 来源:极客头条  作者: [字体: ]

  一、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.3323223323。Reference文件只含有非常少量的信息,这些信息包括被分割的原始Region的Key以及这个文件管理前半段还是后半段。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 来清理多余文件夹)

 





收藏 推荐 打印 | 录入:elainebo | 阅读:
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款