学科分类

HBase的Shell操作

HBase Shell提供了大量的操作HBase的命令,通过Shell命令可以很方便地操作HBase数据库,例如创建、删除及修改表、向表中添加数据、列出表中的相关信息等操作。不过当使用Shell命令行操作HBase时,首先需要进入HBase Shell交互界面。执行“bin/hbase shell”命令进入到目录/hbase-1.2.1的界面,具体效果如图1所示。

img

​ 图1 进入HBase Shell的交互界面

进入HBase Shell交互界面后,可以通过一系列Shell命令操作HBase,接下来,通过一张表列举一些操作HBase表常见的Shell命令,具体如表1所示。

表1 常见的Shell命令

命令名称 相关说明
create 创建表
put 插入或更新数据
scan 扫描表并返回表的所有数据
describe 查看表的结构
get 获取指定行或列的数据
count 统计表中数据的行数
delete 删除指定行或者列的数据
deleteall 删除整个行或列的数据
truncate 删除整个表中的数据,但是结构还在
drop 删除整个表,数据和结构都删除(慎用)

关于HBase中常见的Shell操作的讲解具体如下:

1. 创建表

通过create创建表,具体语法如下:

create 'table name','column family'

在上述语法中,“table name”为表名,创建表必须指定;“column family”为列族名,创建表也必须指定。

例如,创建一个名称为student、列族名为info的HBase表,命令如下:

hbase(main):001:0> **create 'student','info'**
0 row(s) in 2.3870 seconds
=> Hbase::Table - student

执行“list”命令,查看数据库中的数据表,命令如下:

hbase(main):002:0> **list**
TABLE
Student
1 row(s) in 0.0200 seconds
=> ["student"]

在上述代码中,出现了student数据表,说明创建表成功。

2. 插入操作

通过使用put插入或者更新表中的数据,具体语法如下:

put 'table name','row1','column family: column name', 'value'

在上述语法中,“row1”为行键(即Row Key);“column family:column name”为列族名和列名;“value”为插入列的值。

例如,向student表中插入五条数据,命令如下:

hbase(main):003:0> **put 'student','1001','info:sex','male'**
0 row(s) in 0.1350 seconds
hbase(main):004:0> **put 'student','1001','info:age','18'**
0 row(s) in 0.0390 seconds
hbase(main):005:0> **put 'student','1002','info:name','Janna'**
0 row(s) in 0.0360 seconds
hbase(main):006:0> **put 'student','1002','info:sex','female'**
0 row(s) in 0.0190 seconds
hbase(main):007:0> **put 'student','1002','info:age','20'**
0 row(s) in 0.0120 seconds

3. 扫描操作

通过scan扫描表中的数据,具体语法如下:

scan 'table name'

例如,扫描student表所有的数据,命令如下:

hbase(main):008:0> **scan 'student'**
ROW       COLUMN+CELL
1001      column=info:age, timestamp=1545728730891, value=18
1001      column=info:sex, timestamp=1545728722162, value=male
1002      column=info:age, timestamp=1545728751824, value=20
1002      column=info:name, timestamp=1545728738069, value=Janna
1002      column=info:sex, timestamp=1545728745582, value=female

4. 查看操作

通过describe查看表结构,具体语法如下:

describe 'table name'

查看student表的表结构,命令如下:

hbase(main):009:0> **describe 'student'**
Table student is ENABLED
student
COLUMN FAMILIES DESCRIPTION
{NAME => 'info', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false',
KEEP_DELETED_CELLS=>'FALSE',DATA_BLOCK_ENCODING=>'NONE',TTL >'FOREVER',
COMPRESSION=>'NONE',MIN_VERSIONS=>'0',BLOCKCACHE=>'true',BLOCKSIZE=>'65536',
REPLICATION_SCOPE => '0'}
1 row(s) in 0.0430 seconds

上述代码中,通过describe输出了student表的结构,表结构包含很多字段,具体介绍如下:

  • NAME:表示列族名。
  • BLOOMFILTER:表示为列族级别的类型(读者只作了解即可)。
  • VERIONS:表示版本数。
  • N_MEMORY:设置是否存入内存。
  • KEEP_DELETED_CELLS:设置被删除的数据,在基于时间的历史数据查询中是否依然可见。
  • DATA_BLOCK_ENCODING:表示数据块的算法(读者只作了解即可)。
  • TTL:表示版本存活的时间。
  • COMPRESSION:表示设置压缩算法。
  • MIN_VERSIONS:表示最小版本数。
  • BLOCKCACHE:表示是否设置读缓存。
  • REPLICATION:表示设置备份。

5. 更新操作

通过使用put更新student表指定字段的数据,具体语法如下:

put 'table name', 'row ','column family:column name','new value'

在student表中,将行键为1001、列名name且值为18这一条数据中的值更新成100,命令如下:

hbase(main):010:0> **put 'student','1001','info:age','100'**
0 row(s) in 0.0420 seconds

上述命令执行成功后,使用scan扫描数据表中的数据,扫描结果如下:

hbase(main):011:0> scan 'student'
ROW       COLUMN+CELL
**1001      column=info:age, timestamp=1545732938717, value=100**
1001      column=info:sex, timestamp=1545728722162, value=male
1002      column=info:age, timestamp=1545728751824, value=20
1002      column=info:name, timestamp=1545728738069, value=Janna
1002      column=info:sex, timestamp=1545728745582, value=female
2 row(s) in 0.0510 seconds

上述代码中,行键为1001、列名为info:name且值为18这一条数据中的值已经更新成100。

6. 获取指定字段的操作

通过使用get获取指定行或指定列族:列的数据,具体语法如下:

//查看指定行的数据
get 'table name','row1'

获取student表中行键为1001的数据,命令如下:

hbase(main):012:0> **get 'student','1001'**
COLUMN       CELL
info:age      timestamp=1545732938717, value=100
info:sex      timestamp=1545728722162, value=male
2 row(s) in 0.0410 seconds

7. 统计操作

通过使用count统计表中数据的行数,具体语法如下:

count 'table name'

统计student表中数据的行数,命令如下:

hbase(main):013:0> **count 'student'**
2 row(s) in 0.0310 seconds
=> 2

8. 删除操作

通过使用delete删除表中“指定字段”的数据,具体语法如下:

delete 'table name', 'row', 'column name', 'timestamp'

删除student表中行键为1002、列名为info:sex的一条数据,命令如下:

hbase(main):014:0> **delete 'student','1002','info:sex'**
0 row(s) in 0.0370 seconds

上述命令执行成功后,使用scan获取数据表中的数据,命令如下:

hbase(main):015:0> scan 'student'
ROW       COLUMN+CELL
1001      column=info:age, timestamp=1545732938717, value=100
1001      column=info:sex, timestamp=1545728722162, value=male
1002      column=info:age, timestamp=1545728751824, value=20
1002      column=info:name, timestamp=1545728738069, value=Janna

从上述代码可以看出,行键为1002、列名为info:sex的数据已经被删除。

如果要删除表中一行所有的数据,可以使用deleteall命令,具体语法如下:

deleteall 'table name', 'row'

例如,删除student表中行键为1001的所有数据,命令如下:

hbase(main):016:0> **deleteall 'student','1001'**

0 row(s) in 0.0690 seconds

上述通过使用scan扫描数据表中的数据,扫描结果如下:

hbase(main):017:0> scan 'student'
ROW       COLUMN+CELL
1002      column=info:age, timestamp=1545728751824, value=20
1002      column=info:name, timestamp=1545728738069, value=Janna
1 row(s) in 0.0220 seconds

从上述代码可以看出,行键为1001的所有数据已经被删除了。

通过使用truncate清空表中的所有数据,具体语法如下:

truncate 'table name'

清空student表中的所有数据,命令如下:

hbase(main):0018:0> **truncate 'student'**
Truncating 'student' table (it may take a while):
\- Disabling table...
\- Truncating table...
0 row(s) in 3.9730 seconds

通过使用scan扫描数据表中的数据,扫描结果如下:

hbase(main):019:0> scan 'student'
ROW         COLUMN+CELL
0 row(s) in 0.3950 seconds

从上述代码可以看出,表student中的所有数据都已经被清空。

通过使用drop删除表,具体语法如下:

drop 'table name'

例如,删除表student,命令如下:

hbase(main):020:0> **disable 'student'**
0 row(s) in 2.4410 seconds
hbase(main):021:0> **drop 'student'**
0 row(s) in 1.3540 seconds

上述的代码中,首先使用“disable”让student表变为禁用状态,然后进行删除操作。若表不是禁用状态,则无法删除。

通过使用list获取HBase数据库中的所有数据表,命令如下:

hbase(main):022:0> list
TABLE
0 row(s) in 0.0180 seconds
=> []

上述代码中,“[ ]”表示数据库已经为空,说明student表已经被删除。

点击此处
隐藏目录