一、HBase 常用Shell命令
HBase集群启动之后,下面我们来操作一下HBase
1、HBase两种形式
HBase的使用在工作中主要分为两种形式
1、在开发和调试阶段,我们会通过HBase自带的shell命令行去操作,可以执行创建表,添加数据,修改数据之类的操作,比较方便
2、在程序上线运行阶段,需要通过代码来操作HBase,HBase提供的有JavaAPI可以使用
在这里我们先看一下HBase中常用的一些shell命令
2、HBase命令分类
在这里可以把HBase中的命令总结为三种
1、基础命令
2、DDL命令
3、增删改查命令
3、进入HBase的shell命令行
如何进入HBase的shell命令行?
执行hbase shell命令即可
hbase shell
二、基础命令
命令 解释
status 查看集群状态
version 查看当前版本
whoami 查看当前用户
三、DDL命令
命令 解释
create 创建表
list 列出所有表
disable / is_disabled 禁用表/验证表是否被禁用
enable / is_enabled 启用表/验证表是否已启用
desc 查看表的详细信息
alter 修改表结构
exists 验证表是否存在
drop / truncate 删除表/清空表(删除重建)
1、创建表
命令:create ‘表名’,‘列族1’,‘列族2’,'列族N’
注意:单引号不能少,只能使用单引号,不能使用双引号。
例子:create ‘student’,‘info’,‘level’
解释:创建了一张名为student的表,表中有两个列族,分别是info和level。create后面的第一个参数是表名,后面的都是列族的名称
注意:创建表时不能指定列,只能指定列族。
create 'student','info','level'
2、列出所有表
命令:list
list
3、禁用表/验证表是否被禁用
(1)禁用表
命令:disable ‘表名’
disable 'student'
(2)验证表是否被禁用
命令:is_disabled '表名’
解释:返回true表示此表被禁用,此时这个表不能被操作,因为表中的数据是存在Region中的,当Region中的数据达到一定量级的时候会进行分裂,产生多个Region,多个Region会分到其它节点上面。这个时候,数据是不能被操作的,所以会有disabled这个状态。
is_disabled 'student'
4、启用表/验证表是否已启用
(1)启用表
命令:enable '表名’
解释:当表被手工禁用之后,想要恢复使用,需要启动表
enable 'student'
(2)验证表是否已启用
命令:is_enabled '表名’
解释:返回true表示表已启用,默认情况下,创建的新表都是启动状态。
is_enabled 'student'
5、查看表的详细信息
desc ‘表名’
desc 'student'
6、修改表结构
使用alter命令可以完成更改列族参数信息、增加列族、删除列族以及更改表等操作,在这里主要演示一下增加列族、修改列族和删除列族
(1)修改列族
修改列族的参数信息,例如:修改列族的版本
通过desc命令可以看到student表中列族的版本个数:
NAME => ‘info’, VERSIONS => ‘1’
NAME => ‘level’, VERSIONS => ‘1’
这里显示的这两个列族版本个数都是1,说明这两个列族中的所有列的值只能保存最新的1份数据,如果想要保存level列族中所有列的最近3个数据历史版本,可以这样操作:
alter 'student',{NAME=>'level',VERSIONS=>'3'}
注意:
修改已存在数据的列族的属性时,HBase 需要对列族里所有的数据进行修改,如果数据量很大,则修改可能要消耗很长时间。
这里的版本个数是和列族绑定的,不是和某一个列绑定的。
(2)增加列族
在已存在的表的基础之上增加列族,在这我们向student表中增加一个列族:about
alter 'student','about'
(3)删除列族
删除表中已有的列族,在这我们删除student中的about这个列族。
alter 'student',{NAME=>'about',METHOD=>'delete'}
注意
HBase 中的表至少要包含一个列族,因此当表中只有一个列族时,无法将其删除。
7、验证表是否存在
命令:exists '表名’
exists 'student'
8、删除表/清空表(删除重建)
(1)删除表
先创建一个表t1,包含1个列族info
create 't1','info'
然后进行删除
drop 't1'
注意
这里提示删除表失败了,提示的是想要删除表,需要先禁用表。
所以在这先禁用此表
disable 't1'
重新删除表,此时删除成功了。
drop 't1'
(2)清空表(删除重建)
清空表其实包含了两步,删除+重建
命令:truncate ‘表名’
先创建表t2,包含1个列族info
create 't2','info'
清空此表
truncate 't2'
注意
在清空表的时候,会自动先禁用表。
四、增删改查命令
命令 解释
put 添加数据/修改数据
get 查看数据
count 查看表中数据总条数
scan 扫描表中的数据
delete / deleteall 删除数据
1、添加数据/修改数据
HBase中没有insert方法,它也属于key-value类型的NoSQL数据库,类似于HashMap这种数据结构,所以它提供了put方法添加数据
命令:put ‘表名’,‘Rowkey’,‘列族:列’,'value’
添加2条数据,rowkey分别为:jack和tom
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’
注意:
HBase中没有修改方法,所以重复执行put就是修改操作了。
所以put操作在执行的时候,如果指定的数据已经存在,则更新,否则就新增。
2、查看数据
在查看数据的时候有这么几种用法
命令:get ‘表名’,'Rowkey’
命令:get ‘表名’,‘Rowkey’,'列族’
命令:get ‘表名’,‘Rowkey’,‘列族:列’
(1)查询student中rowkey等于jack的所有列族中的数据
get 'student','jack'
(2)查询student中rowkey等于jack的info列族中的数据
get 'student','jack','info'
(3)查询student中rowkey等于jack的info列族中的age列的数据
get 'student','jack','info:age'
3、查看表中数据总条数
命令:count ‘表名’
统计指定表中的数据总数
count 'student'
4、扫描表中的数据
命令:scan '表名’
扫描表中的所有数据
scan 'student'
注意:
scan后面可以添加过滤条件,扫描满足条件的数据,后面再分析
5、删除数据
delete有这么几种用法:
命令:delete ‘表名’,‘Rowkey’,'列族:列’
命令:delete ‘表名’,‘Rowkey’,‘列族:列’,时间戳
注意
delete 操作并不会马上删除数据,只会将对应的数据打上删除标记,只有在HBase底层合并数据时,数据才会被真正删除。
(1)删除指定Rowkey中指定列族中指定列的数据
delete 'student','jack','info:age'
(2)删除指定Rowkey中指定列族中指定列中时间戳小于2的数据
delete 'student','jack','info:age',2
注意
delete 命令不能跨列族操作,如果需要删除表中的某一行数据,则需要使用 deleteall 命令,此时不需要指定列族和列的名称
deleteall 'student','jack'
五、HBase的namespace(命名空间)
HBase的命名空间相当于MySQL中的Database
HBase默认有2个命名空间:分别是hbase和default
其中hbase存放系统表,default是存放用户表
1、查看命名空间
使用list_namespace命令可以查看所有的命名空间,我们创建的表默认在default这个命名空间里面
list_namespace
2、新建命名空间
可以选择创建一个新的namespace
create_namespace 'n1'
3、创建表指定命名空间
在创建表的时候可以选择创建到n1这个namespace中,如何实现呢?
使用这种格式即可:‘命名空间名称:表名’
针对default这个命名空间,在使用的时候可以省略不写
create 'n1:t1','info','level'
此时使用list查看所有的表
list
如果只想查看n1这个命名空间中的表,如何实现呢?
可以使用命令list_namespace_tables
list_namespace_tables 'n1'