一、HBase Shell創建表
1、HBASE shell命令
## hbase(main):001:0> create_namespace 'ns1' //創建命名空間:ns1 hbase(main):002:0> list_namespace //查看命名空間 ## hbase(main):003:0> create 'ns1:t1', 'cf' //創建一個表t1,屬於ns2命名空間,列族:cf hbase(main):005:0> create 'ns1:t2',{NAME =>'f1'},{NAME =>'f2'},{NAME =>'f3'} //創建一張表,有三個列族f1 f2 f3 hbase(main):009:0> create 'ns1:t3', 'f1', 'f2', 'f3' hbase(main):010:0> list_namespace_tables 'ns1' //查看命名空間下的表 hbase(main):011:0> describe 'ns1:t2' //查看命名空間下的表的結構
二、HBase表創建時的預分區
1、預分區
HBase默認建表時有一個region,這個region的rowkey是沒有邊界的,即沒有startkey和endkey,在數據寫入時,所有數據都會寫入這個默認的region, 隨着數據量的不斷 增加,此region已經不能承受不斷增長的數據量,會進行split,分成2個region。在此過程中,會產生兩個問題: 1.數據往一個region上寫,會有寫熱點問題。 2.region split會消耗寶貴的集群I/O資源。 基於此我們可以控制在建表的時候,創建多個空region,並確定每個region的起始和終止rowky,這樣只要我們的rowkey設計能均勻的命中各個region, 就不會存在寫熱點問題。自然split的幾率也會大大降低。當然隨着數據量的不斷增長,該split的還是要進行split。像這樣預先創建hbase表分區的方式,稱之為預分區;
2、預分區方式1
hbase(main):015:0> create 'bflogs', 'info', SPLITS => ['20151001000000000', '20151011000000000', '20151021000000000']
指定預估rowkey(年月日時分秒毫秒):
’20151001000000000’
’20151011000000000’
’20151021000000000’
生成了4個region:
3、預分區方式2
## 可以把預估rowkey,放到文件中 [root@hadoop-senior datas]# cat bflogs-split.txt 20151001000000000 20151011000000000 20151021000000000 ##建表 hbase(main):016:0> create 'bflogs2', 'info', SPLITS_FILE => '/opt/datas/bflogs-split.txt'
生成了4個region:
4、預分區方式3
##自動生成預分區rowkey,不常用 ##方式1 hbase(main):017:0> create 't11', 'f11', {NUMREGIONS => 2, SPLITALGO => 'HexStringSplit'} //生成兩個rowkey ##方式2 hbase(main):018:0> create 't12', 'f12', {NUMREGIONS => 4, SPLITALGO => 'UniformSplit'} //生成4個rowkey
方式1
方式2