一、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:
扫描二维码关注公众号,回复:
6269795 查看本文章
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