zoukankan      html  css  js  c++  java
  • Hbase split的过程以及解发条件

    一、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 来清理多余文件夹) 


     

     

     

  • 相关阅读:
    java中的堆、栈、常量池
    java中int和Integer的区别
    python linecache模块读取文件的方法
    Python 字符串中 startswith()方法
    Python中的filter()函数的用法
    python sort、sorted高级排序技巧
    二级指针内存模型(一)
    Linux下多线程模拟停车场停车
    linux线程操作
    C语言实现多线程排序
  • 原文地址:https://www.cnblogs.com/smarthhl/p/5097059.html
Copyright © 2011-2022 走看看