1、基本操作
1.1、进入HBase客户端命令行
前提是先启动hadoop集群和zookeeper集群。
bin/hbase shell
1.2、查看帮助命令
help
help 查看指定命令的语法规则
查看 list_namespace 的用法(‘记得加单引号’)
help 'list_namespace'
2、namespace
我们首先查看现在有哪些命名空间 ,使用指令:list_namespace
注意:我的hadoop版本3.3.0,HBase2.4.17,两者兼容性有问题,我们直接使用上面的命令会报错,需要做两点:
1. 确保 hadoop 退出安全模式
hadoop dfsadmin -safemode leave
2. 在hbase-site.xml 中添加下面的配置
<property> <name>hbase.wal.provider</name> <value>filesystem</value> </property>
执行语句 list_namespace
2.1、创建命名空间
通过 help 查看创建命名空间的用法:
我们可以看到,我们可以通过两种方式创建 namespace。
创建命名空间 bigdata
3、DDL
3.1、查看表格
list
3.2、创建表格
案例1
在我们的命名空间 bigdata 下创建一个表格 student 并指定两个列族 info 和 msg
如果不指定命名空间的话也可以,这时候使用的是HBase默认的 default 命名空间。
不指定版本空间的话默认版本空间是1,后续可以修改。
create 'bigdata:student','info','msg'
去web端查看:
案例2
同样在命名空间 bigdata 下再创建一个表 person ,指定两个列族 info 和 msg 并指定保留5个历史版本。
每次修改都会将新值追加到版本列表中,同时删除旧版本,以保持每个单元格的版本数不超过创建时指定的值。
create 'bigdata:person',{NAME => 'info',VERSIONS => 5},{NAME => 'msg',VERSIONS => 5}
3.3、查看表的详细信息
describe '命名空间:表名'
3.4、修改表
我们在创建表的时候指定的所有列族相关的信息,都可以后续通过 alter 进行修改,包括增加删除列族,这也是为什么说 HBase 是稀疏的,因为这些列族都是可以后续我们一直增加修改的,包括列族下的列,我们到现在还没有创建真正的列,需要的时候再去创建。
3.4.1、增加列族和修改列族
修改列族版本空间
alter 'bigdata:student',NAME => 'info',VERSIONS => 5
增加列族 'info1'
alter 'bigdata:student',NAME => 'info1',VERSIONS => 5
3.4.2、删除列族
两种删除方法:
alter '命名空间:表名',NAME => '列族',METHOD => 'delete'
或者
alter '命名空间:表名','delete' => '列族'
命名空间为 default 命名空间可以省去不写,下面都是如此。
3.5、删除表
HBase中删除表格时必须先标记为 Disable 不可用的,才能再删除。
3.5.1、disable
disable '命名空间:表名'
3.5.2、drop
drop '命名空间:表名'
4、DML
4.1、写入数据
HBase中写入的数据只能是结构中最底层的 cell (由{rowkey, column Family : column Qualifier, timestamp} 唯一确定的单元)。
学会多用 help 去查看用法:
语法:
put '命名空间:表名','行号','列族:列名','值'
其中的行号和列名都是新增数据的时候才增加的,我们在创建表的时候并不需要定义,再次体现了NoSQL数据库的稀疏性。
4.2、读取数据
4.2.1、get
读取某一行的数据
get '命名空间:表名','行号'
也可以进行列的过滤:
get '命名空间:表名','行号',{COLUMN => '列族:列名'}
限定多列:
get '命名空间:表名','行号',{COLUMN => ['列族:列名','列族:列名','列族:列名'...]}
读取多个版本:比如读取6个版本的历史数据(注意:我们读取到的版本数不会操作它维护的版本数,即我们定义时设置的版本数)
get '命名空间:表名','行号',{COLUMN => '列族:列名',VERSIONS => 6}
4.2.2、scan
扫描整张表
get 只能读取一行数据,我们希望读取多行数据的话就要使用scan了,scan的时候默认读取的是我们最新的版本。
scan '命名空间:表名'
扫描指定范围
通过指定开始和结束行号来输出指定范围的数据,所以说在HBase中,行号的设计很重要。
注意:STARTROW 到 STOPROW 是左闭右开的
scan '命名空间:表名',{STARTROW => '行号',STOPROW => '行号'}
4.3、删除数据
删除数据有两个方法:delete 和 deleteall ,前者是删除一个版本的数据,后者是删除所有版本的数据。
4.3.1、delete
delete 默认删除最新的一个版本。
delete '命名空间:表名','列族:列名'
4.3.2、deleteall
deleteall '命名空间:表名','列族:列名'