HBase Shell常用命令和基本操作
前言
如果忘记了完整的命令,从左输入命令部分内容,然后点击tab键会提示完整的命令
如输入cr
然后点击tab 就会有以下提示
hbase(main):001:0> create
create create_namespace
注意,输入的
表名,行名,列族名,列名和值等
必须都要带引号
,否则会认为是一个命令。
注意,每个命令之后不需要分号
;
结束。
基本操作
1. 进入HBase命令操作行
# hbase shell
2. HBase帮助命令:
hbase(main):002:0> help 'create'
3. 查询服务器状态
hbase(main):003:0> status
1 active master,0 backup masters, 3 servers,0 dead,2.0000 average load
4. 查询版本号
hbase(main):004:0> version
2.0.2.3.1.4.0-315, r, Fri Aug 23 05:18:48 UTC 2019
5. 查看元数据分区信息
hbase(main):042:0> scan 'hbase:meta'
6. 查看hbase中的表,hbase很重要
hbase(main):043:0> list_namespace_tables 'hbase'
DDL 操作
数据定义语言(Data Defination Language,DDL)操作主要操作表和库,查看、修改、删除表等操作。
1. 创建一个命名空间
命名空间相当于数据库
hbase(main):005:0>create_namespace 'namespace1'
2. 列出所有的命名空间
hbase(main):006:0>list_namespace
3. 删除命名空间
hbase(main):007:0>drop_namespace 'namespace1'
4. 创建一个表
创建表table1,列族为column_famaly1,column_famaly2
创建表必须有至少一个列族,多个列族用逗号分开。不指定命名空间,表创建在默认命名空间
hbase(main):008:0> create 'table1','column_famaly1','column_famaly2'
指定命名空间为namespace1 ,格式为create '命名空间:表名','列族名','列族名','列族名...'
hbase(main):009:0> create 'namespace1:table1','column_famaly1','column_famaly2'
创建表时指定列族可以保存的版本,如版本号为3,则可以保存3个版本,不指定默认为1
create '表名',{NAME=>'列族名1',VERSIONS=>给定一个版本号},{NAME=>'列族名2',VERSIONS=>给定的版本号}
创建表时预分区
create '表名','列族',SPLITS=>['1000000','2000000','3000000']
5. 列出所有表
hbase(main):010:0> list
6. 列出指定命名空间下所有表
hbase(main):011:0> list_namespace_tables 'namespace1'
7. 查看表的描述信息
desc和decribe都可以
可查看各个列族信息和版本
hbase(main):012:0> describe 'table1'
带命名空间的表
hbase(main):013:0> describe 'namespace1:table1'
描述信息解释
NAME:表示列族名。
BLOOMFILTER:表示为列族级别的类型(读者只作了解即可)。
VERIONS:表示版本数。
N_MEMORY:设置是否存入内存。
KEEP_DELETED_CELLS:设置被删除的数据,在基于时间的历史数据查询中是否依然可见。
DATA_BLOCK_ENCODING:表示数据块的算法(读者只作了解即可)。
TTL:表示版本存活的时间。
COMPRESSION:表示设置压缩算法。
MIN_VERSIONS:表示最小版本数。
BLOCKCACHE:表示是否设置读缓存。
REPLICATION:表示设置备份。
8. 删除一个列族
hbase(main):014:0> alter 'table1',{NAME=>'column_famaly1',METHOD=>'delete'}
9. 添加一个列族
VERSIONS为可以保存的版本,5表示可以保存5个版本
若该列族已存在,也可以直接更新列族的版本
hbase(main):015:0> alter 'table1',{NAME=>'column_famaly1',VERSIONS => 5}
10. 删除表
需要先把表设置为不可用 disable。
hbase(main):016:0> disable'table1'
然后才能删除。
hbase(main):017:0> drop 'table1'
11. 查询表是否存在
hbase(main):018:0> exists 'table1'
12. 查看表是否可用
hbase(main):019:0> is_enabled 'table1'
DML 操作
DML(Data Manipulation Language,数据操作语言)操作主要操作表中的数据,对表的数据进行添加、修改、删除和查询。
0. 创建表做测试
在默认命名空间下,创建一个student
表,有列族info
和scores
(个人信息和科目分数)
info可以保存的版本为3,scores版本为1
hbase(main):020:0>
create 'student',{NAME=>'info',VERSIONS=>3},{NAME=>'scores',VERSIONS=>1}
1. 插入数据
插入数据的时候需要指定命名空间:表名
,行名
,列族:列名
和值
,命名空间和列名
可省
put '[命名空间:]表名','行名','列族名[:列名]','值'
向student表中增加以下数据
hbase(main):021:0> put 'student','rowkey1','info:name','xhx'
hbase(main):022:0> put 'student','rowkey1','info:age','20'
hbase(main):023:0> put 'student','rowkey1','info:sex','boy'
hbase(main):024:0> put 'student','rowkey2','scores:math','90'
如果不想指定列名就直接写列族:
,冒号后面不加列名
hbase(main):025:0> put 'student','rowkey1','info:','nocol'
2. 全表扫描获取数据,可指定开始结束rowkey
获取 student表的所有数据。如果有多个版本数据会显示时间戳最近的一条数据。
hbase(main):026:0> scan 'student'
ROW COLUMN+CELL
rowkey1 column=info:, timestamp=1619157750674, value=nocol
rowkey1 column=info:age, timestamp=1619157768685, value=20
rowkey1 column=info:name, timestamp=1619158508679, value=xhx3
rowkey1 column=info:sex, timestamp=1619157787678, value=boy
rowkey2 column=scores:math, timestamp=1619157787700, value=90
扫描查看数据,指定查看行
数
hbase(main):040:0> scan 'student',{LIMIT=>2}
ROW COLUMN+CELL
rowkey1 column=info:, timestamp=1619157750674, value=nocol
rowkey1 column=info:age, timestamp=1619157768685, value=20
扫描查看数据,指定开始和结束的rowkey,左闭右开(rowkey1 <= rowkey < rowkey2)
hbase(main):041:0> scan 'student',{STARTROW => 'rowkey1', STOPROW => 'rowkey2'}
ROW COLUMN+CELL
rowkey1 column=info:, timestamp=1619157750674, value=nocol
rowkey1 column=info:age, timestamp=1619157768685, value=20
rowkey1 column=info:name, timestamp=1619158508679, value=xhx3
rowkey1 column=info:sex, timestamp=1619157787678, value=boy
2.1 HBase中文显示是十六进制的,正常显示中文
scan 'student', {FORMATTER => 'toString'}
3. 获取指定的数据
获取 student表的 rowkey1行的所有数据。如果有多版本只显示时间戳最新一条的数据。
hbase(main):027:0> get 'student','rowkey1'
COLUMN CELL
info: timestamp=1619157750674, value=nocol
info:age timestamp=1619157768685, value=20
info:name timestamp=1619158508679, value=xhx3
info:sex timestamp=1619157787678, value=boy
获取 student表的 rowkey1行的info列族下所有数据。如果有多版本只显示时间戳最新一条的数据
hbase(main):028:0> get 'student','rowkey1','info'
COLUMN CELL
info: timestamp=1619157750674, value=nocol
info:age timestamp=1619157768685, value=20
info:name timestamp=1619158508679, value=xhx3
info:sex timestamp=1619157787678, value=boy
注意,获取列族 info
和info:
的结果是不同的。
hbase(main):029:0> get 'student','rowkey1','info:'
COLUMN CELL
info: timestamp=1619157750674, value=nocol
获取student表的 rowkey1行的info列族下列名为name的数据。如果有多版本只显示时间戳最新一条的数据
hbase(main):030:0> get 'student','rowkey1','info:name'
COLUMN CELL
info:name timestamp=1619158508679, value=xhx3
4. 更新数据
更新数据,增加多版本数据,列族info可以保存的版本为3条数据
更新表student
行rowkey1
列族info
列name
的数据
hbase(main):031:0> put 'student','rowkey1','info:name','xhx1'
hbase(main):032:0> put 'student','rowkey1','info:name','xhx2'
hbase(main):033:0> put 'student','rowkey1','info:name','xhx3'
5. 如果有多版本获取多条数据
hbase(main):034:0> get 'student','rowkey1',{COLUMN=>'info:name',VERSIONS=>3}
info:name timestamp=1619158508679, value=xhx3
info:name timestamp=1619158507550, value=xhx2
info:name timestamp=1619158505321, value=xhx1
4. 通过指定时间戳获取某个版本的数据
hbase(main):035:0> get 'student','rowkey1',{COLUMN=>'info:name',TIMESTAMP=>1619158507550}
info:name timestamp=1619158507550, value=xhx2
6. 统计表中的行数
如student表中有rowkey1和rowkey2两行, 则返回2 row(s)
hbase(main):036:0> count 'student'
7. 删除一列
删除列sex
hbase(main):037:0> delete 'student','rowkey1','info:sex'
8. 删除行的所有单元格
删除student表中rowkey1行的所有列
也就是相当于删除了rowkey1行的所有数据
hbase(main):038:0> deleteall 'student','rowkey1'
9. 清空整张表
hbase(main):039:0> truncate 'student'