HBase的預分區
1、為何要預分區?
- 增加數據讀寫效率
- 負載均衡,防止數據傾斜
- 方便集群容災調度region
- 優化Map數量
2、如何預分區?
每一個region維護着startRow與endRowKey,如果加入的數據符合某個region維護的rowKey范圍,則該數據交給這個region維護。
3、如何設定預分區?
3.1、手動指定預分區
create 'staff','info','partition1',SPLITS => ['1000','2000','3000','4000']
完成后如圖:
3.2、使用16進制算法生成預分區
create 'staff2','info','partition2',{NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'}
完成后如圖:
3.3、分區規則創建於文件中
創建splits.txt文件內容如下:
aaaa
bbbb
cccc
dddd
然后執行:
create 'table2','partition2',SPLITS_FILE => 'splits.txt'
成功后如圖:
3.4、使用JavaAPI創建預分區
Java代碼如下:
//自定義算法,產生一系列Hash散列值存儲在二維數組中 byte[][] splitKeys = 某個散列值函數 //創建HBaseAdmin實例 HBaseAdmin hAdmin = new HBaseAdmin(HBaseConfiguration.create()); //創建HTableDescriptor實例 HTableDescriptor tableDesc = new HTableDescriptor(tableName); //通過HTableDescriptor實例和散列值二維數組創建帶有預分區的HBase表 hAdmin.createTable(tableDesc, splitKeys);