溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

HBASE REGION SPLIT策略

發(fā)布時(shí)間:2020-03-04 17:32:34 來源:網(wǎng)絡(luò) 閱讀:1968 作者:誰伴我闖蕩 欄目:關(guān)系型數(shù)據(jù)庫

hbase 0.94.0版本中,對(duì)于region的split方式引入了一個(gè)非常方便的SplitPolicy,通過這個(gè)SplitPolicy,可以主動(dòng)的干預(yù)控制region split的方式。在org.apache.Hadoop.hbase.regionserver包中,可以找到這么幾個(gè)自帶的splitPolicy: ConstantSizeRegionSplitPolicy, IncreasingToUpperBoundRegionSplitPolicy, and KeyPrefixRegionSplitPolicy。

從名字上就可以分辨出這三種split策略的適用場(chǎng)景:

ConstantSizeRegionSplitPolicy:按固定長(zhǎng)度分割region,固定長(zhǎng)度取值優(yōu)先獲取table的”MAX_FILESIZE” 值,若沒有設(shè)定該屬性,則采用在hbase-site.xml中配置的hbase.hregion.max.filesize值,在0.94版本中這個(gè)值的缺省值已經(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的。這個(gè)在使用中需要明確具體的hbase版本號(hào)。這個(gè)策略是0.94版本之前默認(rèn)使用的,采用該策略后,當(dāng)table的某一region中的某一store大小超過了預(yù)定的最大固定長(zhǎng)度時(shí),對(duì)該region進(jìn)行split。splitPoint算法的選擇還是依據(jù)“數(shù)據(jù)對(duì)半”原則,找到該region的最大store的中間長(zhǎng)度的rowkey進(jìn)行split。

 

IncreasingToUpperBoundRegionSplitPolicy:按照region數(shù)量累增劃分region,該策略為Hbase 0.94默認(rèn)使用的策略,采用該策略分割的region大小是不相等的,每次新region的大小隨著region數(shù)量的增多而增大。具體增長(zhǎng)方法為:Min (R^2 *  ”MEMSTORE_FLUSHSIZE”||”hbase.hregion.memstore.flush.size”, “hbase.hregion.max.filesize”);其中R 為當(dāng)前這個(gè)region所在regionserver中對(duì)應(yīng)此table的region數(shù),MEMSTORE_FLUSHSIZE 為table創(chuàng)建時(shí)指定大小,若table指定了此屬性則忽略下面的hbase.hregion.memstore.flush.size 。

hbase.hregion.memstore.flush.size 為hbase-site中設(shè)定大小 默認(rèn)128M

hbase.hregion.max.filesize 為hbase-site中設(shè)定的單個(gè)region大小,默認(rèn)10G

每次region大小是取上述兩個(gè)size中較小的那個(gè)。

假設(shè)使用hbase.hregion.memstore.flush.size 128M, hregion.max.filesize為10G, 那么每次region增長(zhǎng)情況為:512M,1152M,2G,3,2G,4,6G,6,2G,etc。當(dāng)region增長(zhǎng)到9個(gè)時(shí),9*9*128M/1024=10.125G >10G,至此以后region split大小都固定為10G。

 

KeyPrefixRegionSplitPolicy:指定rowkey前綴位數(shù)劃分region,通過讀取table的prefix_split_key_policy.prefix_length屬性,該屬性為數(shù)字類型,表示前綴長(zhǎng)度,

在進(jìn)行split時(shí),按此長(zhǎng)度對(duì)splitPoint進(jìn)行截取。個(gè)人理解是rowkey前綴不相等,則劃分region。此種策略比較適合固定前綴的rowkey。當(dāng)table中沒有設(shè)置prefix_split_key_policy.prefix_length屬性,或prefix_split_key_policy.prefix_length屬性不為Integer類型時(shí),指定此策略效果等同與使用IncreasingToUpperBoundRegionSplitPolicy。

 HBASE REGION SPLIT策略

附上代碼,在創(chuàng)建或修改table時(shí),指定splicpolicy

[java] view plain copy

  1. // 更新現(xiàn)有表的split策略  

  2.          HBaseAdmin admin = new HBaseAdmin( conf);  

  3.          HTable hTable = new HTable( conf, ”test” );  

  4.          HTableDescriptor htd = hTable.getTableDescriptor();  

  5.          HTableDescriptor newHtd = new HTableDescriptor(htd);  

  6.           newHtd.setValue(HTableDescriptor. SPLIT_POLICY, KeyPrefixRegionSplitPolicy.class .getName());// 指定策略  

  7.           newHtd.setValue(“prefix_split_key_policy.prefix_length”, ”2″);  

  8.           newHtd.setValue(“MEMSTORE_FLUSHSIZE”, ”5242880″); // 5M  

  9.          admin.disableTable( ”test”);  

  10.          admin.modifyTable(Bytes. toBytes(“test”), newHtd);  

  11.          admin.enableTable( ”test”);  



目前使用的HBASE1.0.1.1使用的REGION SPLIT策略是IncreasingToUpperBoundRegionSplitPolicy。

驗(yàn)證方式如下:通過HBASE前端查看系統(tǒng)中的TDC_TWEETS_201604表,發(fā)現(xiàn)該表被拆分成18個(gè)REGION,截圖如下:

HBASE REGION SPLIT策略


通過HADOOP命令查看每個(gè)REGION大小,發(fā)現(xiàn)最大的7.4G,最小的88M,符合REGION拆分邏輯,截圖如下:

HBASE REGION SPLIT策略

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI