HBase 常用 shell 命令手册

HBase 是一个开源的分布式非关系型数据库,在大数据行业中应用很广泛。Google 的三篇论文奠定了大数据的理论基础,其中 HBase 就可以看做是 BigTable 的实现,用来存储大规模的数据。

HBase 的命令很多,这篇文章总结了 HBase 最常用的 shell 命令,作为日常开发的手册。

本文基于 JDK1.8 HBase2.2.5 本文假设你已经了解 HBase 的基本概念

HBase 单机版安装

本文基于单机版的 HBase 进行操作,单机版的 HBase 使用起来非常方便,不要配置 HDFS,直接就可以使用,在这里下载 HBase

下载完成之后,直接解压:

1
2
tar xzvf hbase-2.2.5-bin.tar.gz
cd hbase-2.2.5

然后进入 conf 目录,编辑 hbase-env.sh,找到下面这行,配置上 JDK 的目录(HBase 2.2.5 需要 JDK1.8 以上):

1
2
3
# export JAVA_HOME=/usr/java/jdk1.8.0/
# 改成你的 jdk 目录
export JAVA_HOME=your jdk dir

然后启动 HBase:

1
./bin/start-habse.sh

然后通过命令行连接 HBase:

1
./bin/hbase shell

到这里,就完成了单机版 HBase 的安装和启动。

HBase 虽然经常和 HDFS 一起出现,但并不是非得使用 HDFS 作为底层文件系统,也可以选择其他的文件系统,比如电脑的本地文件系统。

基本操作

连上 HBase 之后,就可以对 HBase 进行操作了,HBase 有一些基本的命令来查看 HBase 当前的状态和属性。

连接上 HBase 之后,查看当前连接的用户是谁:

1
whoami

查看有哪些表:

1
list

查看 HBase 服务器状态:

1
status

查看 HBase 版本:

1
version

查看其他命令使用,比如查看 list 命令的详细信息(注意要加引号):

1
help 'list'

表操作

HBase 的建表和 MySQL 等关系型数据库不一样,需要提前创建表结构,对于 HBase 来说,建表很简单,下面全程使用 students 表为例,students 表有两个列族 NOInfo,分别表示学生的学号和详细信息。

创建 namespace:

1
create_namespace 's_school'

修改 namespace:

1
alter_namespace 's_school', {METHOD=>'set', NAME => 'school'}

删除 namespace,只有在 namespce 为空时才能删除:

1
drop_namespace 's_school'

创建 students 表,如果创建表的时候不指定 namespace,name表都会放到默认的 default namespace:

1
cereate 's_school:students', 'No', 'Info'

下面的演示都没有使用 namespace。

查看表的详细信息:

1
describe 'students'

查看表是否存在:

1
exists 'students'

禁用表:

1
disable 'students'

启用表:

1
enable 'students'

查看表是否被禁用/启用:

1
2
is_enabled 'students' # 表是否启用
is_disabled 'students' # 表是否禁用

为表增加列族:

1
alter 'students', 'Extra'

删除一个列族:

1
alter 'students', {NAME=>'Extra', METHOD=>'delete'}

删除表,需要注意,删除表之前要先禁用表:

1
2
disable 'students'
drop 'students'

表创建好了就可以往表里面写数据了,添加数据使用 put 命令。

插入学生 ID:

1
put 'students', '100001', 'No', '100001'
在上面的语句中,直接向 No 这个列族中插入了一条数据。

插入学生姓名,在 Info 列族下,多加了一个 name 列:

1
put 'students', '100001', 'Info:name', 'Tom'

还可以插入年龄:

1
put 'students', '100001', 'Info:age', '18'

只要你愿意,可以增加任意多的列(qualifier)。

HBase 中更新数据使用的也是 put 命令:

1
put 'students', '100001', 'Info:age', '24'

HBase 中查询数据有两种方式 get 和 scan,get 直接通过 rowkey 获取数据,因为有索引的加持,速度非常快,而 scan 则需要通过扫描区间来获取数据,性能会低很多。

通过 get 获取数据:

1
get 'students', '100001'

结果如下:

1
2
3
4
5
COLUMN                                        CELL
Info:age timestamp=1591224539219, value=24
Info:name timestamp=1591224215833, value=Tom
No: timestamp=1591224003381, value=100001
1 row(s)

使用 scan 方式如下:

1
scan 'students'

也可以指定返回结果的行数:

1
scan 'students', {LIMIT=>10}

还可以获得指定列族或者列的数据:

1
scan 'students', {COLUMNS=>'Info:age'}

如果获取多个列族,或者多个列:

1
scan 'students', {COLUMNS=>['Info:age', 'No']}

还可以通过制定 rowkey 的前缀查询,这个功能很常用,这样查询的速度会快很多:

1
scan 'students', {STARTROW => '100'}

如果要统计整个表中数据的行数:

1
count 'students'

删除数据也很简单,可以删除一个列或者一个列族或者一行:

删除一个列族的最新数据:

1
delete 'students', '100001', 'No'

删除一个列的最新数据:

1
delete 'students', '100001', 'Info:age'

delete 只能删除一个版本的数据,如果要删除所有版本的数据,需要使用 deleteall:

删除一个列的所有:

1
deleteall 'students', '100001', 'Info:age'

删除一行数据:

1
deleteall 'students', '100001'

文 / 王二不二

微信公众号

© 2020 ray