在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