3.1-3.3 HBase Shell创建表

一、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:

image


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:

image



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

image

方式2

image

原文地址:https://www.cnblogs.com/weiyiming007/p/10918875.html