1. 程式人生 > >Hbase 表預分割槽----手動分割槽

Hbase 表預分割槽----手動分割槽

預設情況下,在建立HBase表的時候會自動建立一個region分割槽,當匯入資料的時候,所有的HBase客戶端都向這一個region寫資料,直到這個region足夠大了才進行切分。一種可以加快批量寫入速度的方法是通過預先建立一些空的regions,這樣當資料寫入HBase時,會按照region分割槽情況,在叢集內做資料的負載均衡。
命令方式:
create ‘t1’, ‘f1’, {NUMREGIONS => 15, SPLITALGO => ‘HexStringSplit’}
也可以使用api的方式:
bin/hbase org.apache.hadoop.hbase.util.RegionSplitter test_table HexStringSplit -c 10 -f info
引數:
test_table是表名
HexStringSplit 是split 方式
-c 是分10個region
-f 是family

 這樣就可以將表預先分為15個區,減少資料達到storefile 大小的時候自動分割槽的時間消耗,並且還有以一個優勢,就是合理設計rowkey 能讓各個region 的併發請求平均分配(趨於均勻) 使IO 效率達到最高,但是預分割槽需要將filesize 設定一個較大的值,設定哪個引數呢, hbase.hregion.max.filesize 這個值預設是10G 也就是說單個region 預設大小是10G,
 這個引數的預設值在0.90 到0.92到0.94.3各版本的變化:256M--1G--10G 
 但是如果MapReduce Input型別為TableInputFormat 使用hbase作為輸入的時候,就要注意了,每個region一個map,如果資料小於10G 那隻會啟用一個map 造成很大的資源浪費,這時候可以考慮適當調小該引數的值,或者採用預分配region的方式,並將檢測如果達到這個值,再手動分配region。