12.2.3 HBase Shell

HBase为用户提供了一个非常方便的使用方式,我们称之为HBase Shell。

HBase Shell提供了大多数的HBase命令,通过HBase Shell用户可以方便地创建、删除及修改表,还可以向表中添加数据、列出表中的相关信息等。

在启动HBase之后,用户可以通过下面的命令进入HBase Shell之中:


hbase shell


成功进入之后,用户会看到图12-7所示的界面。

12.2.3 HBase Shell - 图1

图 12-7 HBase Shell

进入HBase Shell,输入help之后,可以获取HBase Shell所支持的命令,如表12-1所示。

12.2.3 HBase Shell - 图2

需要注意shutdown操作与exit操作之间的不同:shutdown表示关闭HBase服务,必须重新启动HBase才可以恢复;exit只是退出HBase shell,退出之后完全可以重新进入。

下面,我们将详细介绍常用的HBase命令及其使用方法。

(1)create

create用于通过表名及用逗号分隔开的列族信息来创建表,操作如下:

1)形式一:


hbase>create't1',{NAME=>'f1',VERSIONS=>5}


2)形式二:


hbase>create't1',{NAME=>'f1'},{NAME=>'f2'},{NAME=>'f3'}

hbase>#


上面的命令可以简写为下面所示的格式:


hbase>create't1','f1','f2','f3'


3)形式三:


hbase>create't1',{NAME=>'f1',VERSIONS=>1,TTL=>2592000,

BLOCKCACHE=>true}


下面以“NAME=>'f1'”为例具体说明,其中,列族参数的格式是:箭头左侧为参数变量,右侧为参数对应的值,并用“=>”分开。

(2)list

通过list命令列出所有HBase中包含的表的名称,操作如下:


hbase(main):011:0>list

hbase_tb

test

2 row(s)in 0.0160 secondshbase>list


(3)put

put用于向指定的HBase表单元添加值,例如,向表t1的行r1、列c1:1添加值v1,并指定时间戳为ts的操作如下:


hbase>put't1','r1','c1:1','vl',ts


(4)scan

scan用于获取指定表的相关信息,与create命令类似,可以通过逗号分隔的命令来指定扫描参数。

例如,获取表test的所有值的操作如下:


hbase(main):001:0>scan'test'

ROW COLUMN+CELL

r1 column=c1:1,timestamp=1295692753859,value=value1-1/1

r1 column=c1:2,timestamp=1295692662360,value=value1-1/2

r1 column=c1:3,timestamp=1297476019872,value=value1-1/3

r1 column=c2:1,timestamp=1297475967537,value=value1-2/1

……


获取表test的c1列的所有值的操作如下:


hbase(main):002:0>scan'test',{COLUMNS=>'c1'}

ROW COLUMN+CELL

r1 column=c1:1,timestamp=1295692753859,value=value1-1/1

r1 column=c1:2,timestamp=1295692662360,value=value1-1/2

r1 column=c1:3,timestamp=1297476019872,value=value1-1/3

r2 column=c1:1,timestamp=1297476064414,value=value2-1/1


2 row(s)in 0. 0100 seconds

获取表test的c1列的前一行的所有值的操作如下:


hbase(main):012:0>scan'test',{COLUMNS=>'c1',LIMIT=>1}

ROW COLUMN+CELL

r1 column=c1:1,timestamp=1295692753859,value=value1-1/1

r1 column=c1:2,timestamp=1295692662360,value=value1-1/2

r1 column=c1:3,timestamp=1297476019872,value=value1-1/3

1 row(s)in 0.0120 seconds


(5)get

get用于获取行或单元的值。此命令可以指定表名、行值,以及可选的列值和时间戳。

获取表test行r1的值的操作如下:


hbase(main):002:0>get'test','r1'

COLUMN CELL

c1:1 timestamp=1295692753859,value=value1-1/1

c1:2 timestamp=1295692662360,value=value1-1/2

c1:3 timestamp=1297476019872,value=value1-1/3

c2:1 timestamp=1297475967537,value=value1-2/1

c2:2 timestamp=1297476039968,value=value1-2/2

5 row(s)in 0.0450 seconds


获取表test行r1列c1:1的值的操作如下:


hbase(main):005:0>get'test','r1',{COLUMN=>'c1:1'}

COLUMN CELL

c1:1 timestamp=1295692753859,value=value1-1/1

1 row(s)in 0.0050 seconds


需要注意的是,COLUMN和COLUMNS是不同的,scan操作中的COLUMNS指定的是表的列族,get操作中的COLUMN指定的是特定的列,COLUMN的值实质上为“列族+:+列修饰符”。

另外,在shell中,常量不需要用引号括起来,但二进制的值需要用双引号括起来,而其他值则用单引号括起来。HBase Shell的常量可以通过在shell中输入“Object.constants”命令来查看。

代码清单12-1所示是一个使用HBase Shell操作的具体例子。

代码清单12-1 HBase Shell操作


hbase(main):004:0>create'test','c1','c2'

0 row(s)in 1.0620 seconds

hbase(main):005:0>list

test

1 row(s)in 0.0090 seconds

hbase(main):006:0>put'test','r1','c1:1','value1-1/1'

0 row(s)in 0.0050 seconds

hbase(main):007:0>put'test','r1','c1:2','value1-1/2'

0 row(s)in 0.0060 seconds

hbase(main):008:0>put'test','r1','c1:3','value1-1/3'

0 row(s)in 0.0110 seconds

hbase(main):009:0>put'test','r1','c2:1','value1-2/1'

0 row(s)in 0.0040 seconds

hbase(main):010:0>put'test','r1','c2:2','value1-2/2'

0 row(s)in 0.0030 seconds

hbase(main):011:0>put'test','r2','c1:1','value2-1/1'

0 row(s)in 0.0030 seconds

hbase(main):012:0>put'test','r2','c2:1','value2-2/1'

0 row(s)in 0.0040 seconds

hbase(main):013:0>scan'test'

ROW COLUMN+CELL

r1 column=c1:1,timestamp=1297513518032,value=value1-1/1

r1 column=c1:2,timestamp=1297513531036,value=value1-1/2

r1 column=c1:3,timestamp=1297513538344,value=value1-1/3

r1 column=c2:1,timestamp=1297513553055,value=value1-2/1

r1 column=c2:2,timestamp=1297513560121,value=value1-2/2

r2 column=c1:1,timestamp=1297513580833,value=value2-1/1

r2 column=c2:1,timestamp=1297513594789,value=value2-2/1

2 row(s)in 0.0260 seconds

hbase(main):014:0>get'test','r1',{COLUMN=>'c2:2'}

COLUMN CELL

c2:2 timestamp=1297513560121,value=value1-2/2

1 row(s)in 0.0140 seconds

hbase(main):015:0>disable'test'

0 row(s)in 0.0930 seconds

hbase(main):016:0>drop'test'

0 row(s)in 0.0770 seconds

hbase(main):017:0>exit