在Hbase中split是一個(gè)很重要的功能掌桩,Hbase是通過(guò)把數(shù)據(jù)分配到一定數(shù)量的region來(lái)達(dá)到負(fù)載均衡的边锁。一個(gè)table會(huì)被分配到一個(gè)或多個(gè)region中,這些region會(huì)被分配到一個(gè)或者多個(gè)regionServer中波岛。在自動(dòng)split策略中茅坛,當(dāng)一個(gè)region達(dá)到一定的大小就會(huì)自動(dòng)split成兩個(gè)region。table在region中是按照row key來(lái)排序的,并且一個(gè)rowkey所對(duì)應(yīng)的行只會(huì)存儲(chǔ)在一個(gè)region中贡蓖,這一點(diǎn)保證了Hbase的強(qiáng)一致性 曹鸠。犧牲的是可用性,分裂的時(shí)候系統(tǒng)不可用斥铺。
預(yù)分裂
默認(rèn)一開(kāi)始的時(shí)候系統(tǒng)會(huì)只向一個(gè)RegionServer寫(xiě)數(shù)據(jù)彻桃,系統(tǒng)不值得startRow和endRow,我們可以在運(yùn)行的時(shí)候提前Split晾蜘,提高并發(fā)寫(xiě)邻眷。
UniformSplit:
會(huì)把行鍵均勻地分割多個(gè)部分,如果行將rowkey是隨機(jī)的字節(jié)數(shù)組剔交,用UniformSplit就比較合適
firstRowBytes和lastRowBytes可以設(shè)置
Bytes.split方法:
iterateOnSplit方法把a(bǔ)和b轉(zhuǎn)換為BigInteger然后平均分配數(shù)值
HexStringSplit:
以十六進(jìn)制字符串作為行鍵rowkey或者行鍵rowkey的前綴是十六進(jìn)制字符串肆饶,用HexStringSplit
HexStringSplit是把轉(zhuǎn)換為BigInteger的時(shí)候輸入的參數(shù)是16,會(huì)依據(jù)16進(jìn)制進(jìn)行轉(zhuǎn)換岖常。
UniformSplit是按照字節(jié)如果兩個(gè)自己數(shù)不相等則前補(bǔ)0驯镊,然后前面都加上1,0(1代表是整數(shù),0解析的時(shí)候會(huì)跳過(guò))
自分類(lèi)策略????
ConstantSizeRegionSplitPolicy
0.94.0版本以前默認(rèn)的分裂策略竭鞍,任何一個(gè)Store也就是列族到底閾值都會(huì)分裂
有一個(gè)Store不能分裂則不分裂 是指任何一個(gè)StoreFile被引用阿宅,否則有一個(gè)store的大小達(dá)到閾值則分裂
IncreasingToUpperBoundRegionSplitPolicy
initialSize默認(rèn)值
tableRegionsCount是有幾個(gè)Region
sizetoCheck取值:如果Region數(shù)在0-1000之間那么是initialSize*Regin數(shù)的立方
大于100是desireMaxFileSize默認(rèn)10G
DelimitedKeyPrefixRegionSplitPolicy
是IncreasingToUpperBoundRegionSplitPolicy的子類(lèi)分裂的條件和IncreasingToUpperBoundRegionSplitPolicy一樣但是尋找分裂點(diǎn)方法重寫(xiě)了
找到父類(lèi)的分裂點(diǎn)(中間點(diǎn)),只要delimiter前的作為分離點(diǎn)
KeyPrefixRegionSplitPolicy
是IncreasingToUpperBoundRegionSplitPolicy的子類(lèi)分裂的條件和IncreasingToUpperBoundRegionSplitPolicy一樣但是尋找分裂點(diǎn)方法重寫(xiě)了
支取splitPoint的前prefixLength個(gè)
prefixLength的配置方法
SteppingSplitPolicy
是IncreasingToUpperBoundRegionSplitPolicy的子類(lèi)只重寫(xiě)了getSizeToCheck
如果只有一個(gè)Region大小是initialSize默認(rèn)flushSize*2其他的都是desiredMaxFileSize默認(rèn)10G