目录
HBase数据定义
HBase Shell
HBase Shell:HBase的命令行工具,最简单的接口,适合HBase管理使用;
[root@localhost bin]# hbase shell
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 1.2.6, rUnknown, Mon May 29 02:25:32 CDT 2017
hbase(main):001:0>
命令 | 描述 | 语法 |
---|---|---|
help | 查看命令的使用描述 | help '命令名' |
whoami | 我是谁 | whoami |
version | 返回hbase版本的信息 | version |
status | 返回hbase集群的状态信息 | status |
table_help | 查看如何操作表 | table_help |
shutdown | 关闭hbase集群(与exit不同) | |
tools | 列出hbase所支持的工具 | |
exit | 推出hbase shell |
数据定义
命令 | 描述 |
---|---|
create | 创建指定模式的新表 |
alter | 修改表的结构,如添加新的列族 |
describe | 展示表结构的信息,包括列族的数量与属性 |
list | 列出HBase中已有的表 |
disable/enable | 删除或更改表时,需禁用表,更改完后需要解禁表 |
disable_all | 禁用所有的表 |
is_disabled | 判断一个表是否被禁用 |
drop | 删除表 |
truncate | 如果只是想删除数据而不是表结构,用truncate来禁用表、删除表并自动重建表结构 |
创建表
- 语法
create '表名','列族名'
-
描述
- 必须指定表名和列族;
- 可以创建多个列族
- 列可在插入数据时直接定义
- 可以对表和列族指明一些参数
- 参数大小写敏感
- 字符串参数需要包含在单引号中
-
案例演示
例1:create 'teacher','f1','f2'
例2:create 'teacher','f1',f2',MAX_FILESIZE=>'134217718'
例3:create 'teacher',{NAME=>‘f1’,VERSIONS=>5,BLOCKCACHE=>true}
例4:create 'teachEr','f1','f2'
例5:create 'teacher','F1','f2'
例6:create 'teacher',‘f1','f1'
表相关操作查看
某个表是否存在
- 语法
exists
Hbase(main):005:0>exists ’teacher’
Table teacher does exist
0 row(s) in 0.2080 seconds
查看当前HBase所有的表名
- 语法
list
Hbase(main):006:0>list
TABLE
teacher
Hbase thrift
Student
Test
4 row(s) in 0.0560 seconds
查看选定表的列族及其参数
- 语法
describe
hbase(main):006:0>describe ‘teacher'
Table teacher is ENABLED
tercher
COLUMN FAMILIES DESCRIPTION
{NAME => ‘f1', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DE LETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_S COPE => '0'}
{NAME => ‘f2', BLOOMFILTER => 'ROW', VERSIONS => ‘5', IN_MEMORY => 'false', KEEP_D ELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION ='NONE', MIN_VERSIONS => '0', BLOCKCACHE => ‘false', BLOCKSIZE => '65536', REPLICATION_ SCOPE => '0'}
2 row(s) in 0.0340 seconds
修改表结构
-
功能
- 修改表中列族的参数信息
- 增加列族
- 移除或删除已有的列族
-
语法
-
添加一个列族
alter '表名', '列族名'
- 删除列族
alter '表名', {NAME=> '列族名', METHOD=> 'delete'}
例1:alter 'teacher', {NAME => 'f1', VERSIONS => 4}
例2:alter 'teacher', 'f3'
例3:alter 'teacher', {NAME=>'f3', METHOD=>'delete'}
例4:alter 'teacher', 'delete' => 'f3'
注意
删除列族时,表中至少有两个列族;
删除表
- 语法
disable 'teacher'
drop ' teacher '
- 注意:删除表之前需要先禁用表
清空数据
- 语法
truncate
truncate 'teacher'
HBase数据操作
put
- 语法
put '表名','行键','列族:列限定符','单元格值',时间戳
- 描述
- 必须指定表名、行键、列族、列限定符
- 列族必须是已经创建的,否则HBase会报错
- 列名是临时定义的,所以列族里的列是可以随意扩展的
- 时间戳是可选参数,如不设置,则系统会自动插入当前时间为时间戳
- 参数区分大小写,字符串使用单引号
- 只能插入单个数据
- 描述:如果指定的单元格已经存在,则put操作为更新数据;
- 单元格会保存指定VERSIONS=>n的多个版本数据
delete
- 语法
delete '表名','行键','列族<:列限定符>',<时间戳>
-
描述:必须指定表名、行键和列族,列限定符和时间戳是可选参数;
- delete最小删除粒度为单元格,且不能跨列族删除
注意
delete操作并不会马上删除数据,只是将对应的数据打上删除标记,只有在数据产生合并时,数据才会被删除。
数据查询
get
- 语法
get '表名','行键',<'列族:列限定符',时间戳>
get 'student','001'
get 'student','001',{COLUMN=>'Grades'}
get 'student','001' ,{COLUMN=>'Grades',TIMERANGE => [1,2]}
get 'student','001' ,{COLUMN=>'StuInfo',VERSIONS=>2}
hbase(main):020:0> put 'student', '001', 'StuInfo:Name','jim green',2
0 row(s) in 0.0140 seconds
hbase(main):021:0> put 'student', '001', 'StuInfo:Name','jerry',3
0 row(s) in 0.0140 seconds
hbase(main):022:0> put 'student', '001', 'StuInfo:Name','curry',4
0 row(s) in 0.0690 seconds
hbase(main):023:0> get 'student','001',{COLUMN => 'StuInfo',VERSIONS => 2}
COLUMN CELL
StuInfo:Age timestamp=1541039335956, value=18
StuInfo:Name timestamp=4, value=curry
StuInfo:Name timestamp=3, value=jerry
StuInfo:Sex timestamp=1541039336280, value=Male
4 row(s) in 0.0240 seconds
scan
- 语法
scan '表名',{< '列族:列限定符',时间戳>}
- 扫描全表:scan '表名'
- 指定列族名称:
scan 'student', {COLUMN=>'stuinfo'}
- 指定列族和列的名称
scan 'student', {COLUMN=>'stuInfo:Name'}
- 指定输出行数
scan 'student', {LIMIT => 1}
- 指定输出行键范围
scan 'student', {STARTROW =>'001',ENDROW => '003'}
- 指定组合条件查询
scan 'student', {COLUMN=>'stuinfo',STARTROW =>'001',ENDROW => '002'}
数据统计
- 语法
count '表名'
hbase(main):004:0> count ‘student’
3 row(s) in 0.0440 seconds
在关系型数据库中,有多少条记录就有多少行,表中的行数很容易统计。而在 HBase 里,计算逻辑行需要扫描全表的内容,重复的行键是不纳入计数的,且标记为删除的数据也不纳入计数。
执行 count 命令其实是一个开销较大的进程,特别是应用在大数据场景时,可能需要持续很长时间,因此,用户一般会结合 Hadoop 的 MapReduce 架构来进行分布式的扫描计数。