HBase分裂策略

在Hbase中split是一个很重要的功能,Hbase是通过把数据分配到一定数量的region来达到负载均衡的。一个table会被分配到一个或多个region中,这些region会被分配到一个或者多个regionServer中。在自动split策略中,当一个region达到一定的大小就会自动split成两个region。table在region中是按照row key来排序的,并且一个rowkey所对应的行只会存储在一个region中,这一点保证了Hbase的强一致性 。牺牲的是可用性,分裂的时候系统不可用。

预分裂

默认一开始的时候系统会只向一个RegionServer写数据,系统不值得startRow和endRow,我们可以在运行的时候提前Split,提高并发写。

UniformSplit:

会把行键均匀地分割多个部分,如果行将rowkey是随机的字节数组,用UniformSplit就比较合适

firstRowBytes和lastRowBytes可以设置

Bytes.split方法:

iterateOnSplit方法把a和b转换为BigInteger然后平均分配数值

HexStringSplit:

以十六进制字符串作为行键rowkey或者行键rowkey的前缀是十六进制字符串,用HexStringSplit

HexStringSplit是把转换为BigInteger的时候输入的参数是16,会依据16进制进行转换。

UniformSplit是按照字节如果两个自己数不相等则前补0,然后前面都加上1,0(1代表是整数,0解析的时候会跳过)

自分类策略    

ConstantSizeRegionSplitPolicy

0.94.0版本以前默认的分裂策略,任何一个Store也就是列族到底阈值都会分裂

有一个Store不能分裂则不分裂 是指任何一个StoreFile被引用,否则有一个store的大小达到阈值则分裂

IncreasingToUpperBoundRegionSplitPolicy

initialSize默认值

tableRegionsCount是有几个Region

sizetoCheck取值:如果Region数在0-1000之间那么是initialSize*Regin数的立方

大于100是desireMaxFileSize默认10G

DelimitedKeyPrefixRegionSplitPolicy

是IncreasingToUpperBoundRegionSplitPolicy的子类分裂的条件和IncreasingToUpperBoundRegionSplitPolicy一样但是寻找分裂点方法重写了

找到父类的分裂点(中间点),只要delimiter前的作为分离点

KeyPrefixRegionSplitPolicy

是IncreasingToUpperBoundRegionSplitPolicy的子类分裂的条件和IncreasingToUpperBoundRegionSplitPolicy一样但是寻找分裂点方法重写了

支取splitPoint的前prefixLength个

prefixLength的配置方法

SteppingSplitPolicy

是IncreasingToUpperBoundRegionSplitPolicy的子类只重写了getSizeToCheck

如果只有一个Region大小是initialSize默认flushSize*2其他的都是desiredMaxFileSize默认10G

    原文作者:是我_7b3f
    原文地址: https://www.jianshu.com/p/21d55778b783
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞