hbase 0.94.0版本中,對于region的split方式引入了一個非常方便的SplitPolicy,通過這個SplitPolicy,可以主動的干預(yù)控制region split的方式。在org.apache.Hadoop.hbase.regionserver包中,可以找到這么幾個自帶的splitPolicy: ConstantSizeRegionSplitPolicy, IncreasingToUpperBoundRegionSplitPolicy, and KeyPrefixRegionSplitPolicy。
網(wǎng)站的建設(shè)成都創(chuàng)新互聯(lián)公司專注網(wǎng)站定制,經(jīng)驗(yàn)豐富,不做模板,主營網(wǎng)站定制開發(fā).小程序定制開發(fā),H5頁面制作!給你煥然一新的設(shè)計體驗(yàn)!已為成都加固等企業(yè)提供專業(yè)服務(wù)。從名字上就可以分辨出這三種split策略的適用場景:
ConstantSizeRegionSplitPolicy:按固定長度分割region,固定長度取值優(yōu)先獲取table的”MAX_FILESIZE” 值,若沒有設(shè)定該屬性,則采用在hbase-site.xml中配置的hbase.hregion.max.filesize值,在0.94版本中這個值的缺省值已經(jīng)被調(diào)整為:10 * 1024 * 1024 * 1024L 也就是10G,網(wǎng)上很多關(guān)于 hbase.hregion.max.filesize 默認(rèn)值 1G的文章應(yīng)該都是基于0.92的hbase的。這個在使用中需要明確具體的hbase版本號。這個策略是0.94版本之前默認(rèn)使用的,采用該策略后,當(dāng)table的某一region中的某一store大小超過了預(yù)定的大固定長度時,對該region進(jìn)行split。splitPoint算法的選擇還是依據(jù)“數(shù)據(jù)對半”原則,找到該region的大store的中間長度的rowkey進(jìn)行split。
IncreasingToUpperBoundRegionSplitPolicy:按照region數(shù)量累增劃分region,該策略為Hbase 0.94默認(rèn)使用的策略,采用該策略分割的region大小是不相等的,每次新region的大小隨著region數(shù)量的增多而增大。具體增長方法為:Min (R^2 * ”MEMSTORE_FLUSHSIZE”||”hbase.hregion.memstore.flush.size”, “hbase.hregion.max.filesize”);其中R 為當(dāng)前這個region所在regionserver中對應(yīng)此table的region數(shù),MEMSTORE_FLUSHSIZE 為table創(chuàng)建時指定大小,若table指定了此屬性則忽略下面的hbase.hregion.memstore.flush.size 。
hbase.hregion.memstore.flush.size 為hbase-site中設(shè)定大小 默認(rèn)128M
hbase.hregion.max.filesize 為hbase-site中設(shè)定的單個region大小,默認(rèn)10G
每次region大小是取上述兩個size中較小的那個。
假設(shè)使用hbase.hregion.memstore.flush.size 128M, hregion.max.filesize為10G, 那么每次region增長情況為:512M,1152M,2G,3,2G,4,6G,6,2G,etc。當(dāng)region增長到9個時,9*9*128M/1024=10.125G >10G,至此以后region split大小都固定為10G。
KeyPrefixRegionSplitPolicy:指定rowkey前綴位數(shù)劃分region,通過讀取table的prefix_split_key_policy.prefix_length屬性,該屬性為數(shù)字類型,表示前綴長度,
在進(jìn)行split時,按此長度對splitPoint進(jìn)行截取。個人理解是rowkey前綴不相等,則劃分region。此種策略比較適合固定前綴的rowkey。當(dāng)table中沒有設(shè)置prefix_split_key_policy.prefix_length屬性,或prefix_split_key_policy.prefix_length屬性不為Integer類型時,指定此策略效果等同與使用IncreasingToUpperBoundRegionSplitPolicy。
附上代碼,在創(chuàng)建或修改table時,指定splicpolicy
[java] view plain
// 更新現(xiàn)有表的split策略
HBaseAdmin admin = new HBaseAdmin( conf);
HTable hTable = new HTable( conf, ”test” );
HTableDescriptor htd = hTable.getTableDescriptor();
HTableDescriptor newHtd = new HTableDescriptor(htd);
newHtd.setValue(HTableDescriptor. SPLIT_POLICY, KeyPrefixRegionSplitPolicy.class .getName());// 指定策略
newHtd.setValue(“prefix_split_key_policy.prefix_length”, ”2″);
newHtd.setValue(“MEMSTORE_FLUSHSIZE”, ”5242880″); // 5M
admin.disableTable( ”test”);
admin.modifyTable(Bytes. toBytes(“test”), newHtd);
admin.enableTable( ”test”);
目前使用的HBASE1.0.1.1使用的REGION SPLIT策略是IncreasingToUpperBoundRegionSplitPolicy。
驗(yàn)證方式如下:通過HBASE前端查看系統(tǒng)中的TDC_TWEETS_201604表,發(fā)現(xiàn)該表被拆分成18個REGION,截圖如下:
通過HADOOP命令查看每個REGION大小,發(fā)現(xiàn)大的7.4G,最小的88M,符合REGION拆分邏輯,截圖如下:
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。