当前位置: > > > HBase - shell命令行工具使用详解(附样例)

HBase - shell命令行工具使用详解(附样例)

    在开发和调试阶段,我们通过 HBase 自带的 Shell 命令行可以进行创建表、添加数据、修改数据等操作,而无需编写复杂的代码,比较方便。HBaseShell 命令行中的命令大致可以分为 3 种:基础命令、DDL 命令和增删改查命令。
    下面我将通过样例对各个命令进行演示。首先执行如下命令进入 HBaseShell 命令行:
./bin/hbase shell

一、基础命令

1,查看集群状态

执行 status 命令将显示当前 HBase 集群的状态信息,包括活动的 RegionServersMaster 的状态等。
status

2,查看 HBase 集群的版本

执行 version 命令可以获取 HBase 集群的版本信息,包括 HBase 的版本号以及其他相关的版本信息。
version

3,查看当前登录的用户

执行 whoami 命令将显示当前 HBase Shell 中登录的用户信息。
whoami

二、创建表、修改表、删除表命令

1,创建表

(1)使用 create 命令可以创建表,格式如下,命令后面的第 1 个参数是表名,后面的都是列族的名称。
注意:单引号不能少。只能使用单引号,不能使用双引号。
create '表名' , '列族 1' , '列族 2' , '列族 N'

(2)下面创建一张名为 student 的表,表中有两个列族:infolevel
create 'student','info','level'

2,列出所有表

使用 list 命令可以列出 HBase 中所有的表:
list

3,禁用表 / 验证表是否被禁用

(1)disable 命令可以禁用表,下面命令禁用 student 这张表。
 disable 'student'

(2)is_disabled 命令可以验证表是否被禁用,下面命令验证 is_disabled 是否被禁用。
提示:该命令返回 true 表示此表被禁用,此时这个表不能被操作。因为表中的数据是存在 Region 中的,当 Region 中的数据达到一定量级时会进行分裂,会分到其他节点上,此时数据是不能被操作的,所以会有 disabled 这个功能。
is_disabled 'student'
 

4,启用表 / 验证表是否已启用

(1)当表被手工禁用之后,要恢复使用则需要先使用 enable 命令启用表。
enable 'student'

(2)执行 is_enabled 命令可以验证表是否已启用。该命令返回 true 表示表已启用。默认情况下,创建的新表都是启用状态。
is_enabled 'student'
 

5,查看表的详细信息

使用 describe 或者 desc 命令可以查看指定表的详细信息:
desc 'student'
 

6,修改表结构

使用 alter 命令可以完成更改列族参数信息、增加列族、删除列族、更改表的相关设置等操作。

(1)下面是一个修改 student 表中列族的参数信息样例:修改列族的版本数为 3
注意:在修改已存有数据的列族属性时,HBase 需要对列族里所有的数据进行修改,如果数据量很大,则修改操作可能要消耗很长时间。
alter 'student', {NAME => 'info', VERSIONS => 3}
  • 然后,通过 desc 命令可以看到,student 表中列族的版本数变成了 3

(2)下面是一个在 student 表中增加一个列族的样例:增加一个 about 列族
alter 'student','about'
  • 此时查看 student 表中的列族信息,会发现有 3 个列族——多了 1about 列族。
 
(3)下面是一个删除 student 表中已有的列族的样例:删除 about 这个列族
注意HBase 中的表至少要包含 1 个列族,因此当表中只有 1 个列族时无法将其删除。
alter 'student',{NAME=>'about',METHOD=>'delete'}
  • 此时再查看 student 中的列族信息,会发现就只有 2 个列族:info level
  

7,验证表是否存在

使用 exists 命令可以验证指定表是否存在,表存在时返回 true,否则返回 false
exists 'student'
 

8,删除表

(1)如果要删除表,则需要先使用 disable 命令禁用该表:
disable 't1'

(2)将表禁用后,我们就可以使用 drop 命令删除该表:
drop 't1'

9,清空表

执行 truncate 命令可以清空指定表,清空表其实包含了两个步骤:删除和重建。
提示:在清空表时会自动先禁用表,无需人工预先进行禁用操作。
truncate 't2'

三、添加、查看、删改命令

1,添加数据 / 修改数据

(1)HBase 中没有 insert 命令,它是 Key-Value 类型的数据库,类似于 Java 中的 HashMap 结构,所以它提供了 put 命令用来添加数据。命令格式如下:
注意HBase 中没有提供 update 命令,重复执行 put 命令即可实现修改功能。所以在执行 put 命令时,如果指定 Rowkey 的数据已经存在,则进行更新。
put '表名' , 'Rowkey' , '列族:列' , 'value'

(2)下面命令往 student 表中添加 2 条数据,Rowkey 分别为:jacktom
put 'student','jack','info:sex','man'
put 'student','jack','info:age','22'
put 'student','jack','level:class','A'
put 'student','tom','info:sex','woman'
put 'student','tom','info:age','20'
put 'student','tom','level:class','B'

2,查看数据

(1)HBase 中查看数据有下面这几种用法:
get '表名' , 'Rowkey' 
get '表名' , 'Rowkey' , '列族' 
get '表名' , 'Rowkey' , '列族:列'

(2)下面命令查询 student 表中 Rowkey 等于 jack 的所有列族中的数据。
get 'student','jack'
 
(3)下面命令查询 student 表中 Rowkey 等于 jackinfo 列族中的数据。
get 'student','jack','info'

(4)下面命令查询 student 表中 Rowkey 等于 jackinfo 列族中 age 列的数据。
get 'student','jack','info:age'

3,查看表中数据总条数

使用 count 命令可以统计指定表中的数据总数。
count 'student'
 

4,扫描表中的数据

(1)下面命令扫描 student 表中的所有数据:
scan 'student'

(2)scan 后面可以添加过滤条件,以扫描满足条件的数据。比如下面样例仅返回 info:sex 列值为 man 的行。
scan 'student', {FILTER => "ValueFilter( =, 'binary:man')"}
 

5,删除数据

(1)delete 有下面这几种用法:
注意delete 命令并不会马上删除数据,只会给对应的数据打上删除标识,当 HBase 合并 Region 时数据才会被真正删除。
delete '表名' , 'Rowkey' , '列族' 
delete '表名' , 'Rowkey' , '列族:列' 
delete '表名' , 'Rowkey' , '列族' , '时间戳'

(2)下面命令删除 student 表中指定 Rowkey 指定列族的所有数据:
delete 'student','jack','info'

(3)下面命令删除 student 表中指定 Rowkey 指定列族指定列的数据。
delete 'student','jack','info:age'

(4)下面命令删除 student 表中指定 Rowkey 指定列族指定列中时间戳小于 2 的数据。
delete 'student','jack','info:age',2

(5)delete 命令不能跨列族,如果要删除表中某一条数据所有列族上的数据(删除表中的一个逻辑行),则使用 deleteall 命令,此时不需要指定列族和列的名称。
deleteall 'student','jack'

四、命名空间(namespace)

1,查看所有的命名空间

(1)HBase 的命名空间相当于 MySQL 中的 DatabaseHBase 默认有 2 个命名空间,分别是 hbasedefault
  • hbase 存放系统表
  • default 是存放用户表

(2)使用 list_namespace 命令可以查看所有的命名空间,我们创建的表默认在 default 这个命名空间里面。
list_namespace

2,创建命名空间

下面命令创建一个新的名为 hanggenamespace
create_namespace 'hangge'

3,创建、查询指定命名空间下面的表

(1)在指定命名空间下面创建表使用 '命名空间名称:表名' 这种格式即可,比如下面将表创建到 hangge 这个 namespace 中:
注意:针对 default 这个命名空间,在使用的时候可以省略不写。
 create 'hangge:t1','info','level'

(2)使用 list 查看所有的表:
list

(3)如果只想查看指定命名空间中的表,可以使用 list_namespace_tables 命令:
list_namespace_tables 'hangge'
评论0