Hbase学习之简单操作
使用
Hbase是一个高可靠性、高性能、可伸缩、分布式、基于列存储的非关系型(NoSQL)数据库。hbase将数据存储在HDFS集群上,备份机制齐全。通过 ZooKeeper 协调查找数据,访问速度快。
架构
HMaster Server :负责管理所有的 HRegion Server,每台 HRegion Server 都会和 HMaster Server 通信。本身不存储 HBase 中的任何数据,存储数据到 HRegion Server 的映射,告诉每台 HRegion Server 要维护哪些HRegion。
HRegionServer:HBase 逻辑上的表可能会被划分为多个HRegion,然后存储到 HRegion Server 群中。一台机器上一般只运行一个 HRegion Server。
HRegion:表的大小超过设置的值,自动将表划分为不同的区域,每个区域包含所有行的子集。从物理上讲,一张表被拆分成了多块,每一块儿就是一个 HRegion。
ZooKeeper:协调 HBase 中所有的服务器。处理 HBase 服务器运行期间可能发生的错误。
mysql表和hbase表的区别:
mysql表
id | name | age | math | english |
---|---|---|---|---|
01 | jack | 33 | null | 90 |
hbase表
rowkey | base Info | score Info | timeStamp | ||
name | age | math | english | ||
1001 | jack | t1 | |||
1001 | 33 | t2 | |||
1001 | 90 | t4 |
插入元素时,是按照(key-value对)一个一个的插入。如果出现一个列的值为空,就不会加入这条数据,而不是像mysql一样用null占位。
hbase表构成(按照数据定位的顺序):
行键(rowkey):每一行数据的唯一标识符,也是插入数据时的key值.表中数据按照rowkey的字典排序
列簇(列族)(columns family):一个列簇包含多个列。列簇:列名。一般不要定义多个列簇。
时间戳(timeStamp):默认是插入数据时的时间,用户可以显示定义。在每个 Cell中,不同版本的数据按照时间戳降序排序,即最新的数据排在最前面。
单元(cell):每个单元的数据,数据没有类型,全都是字节码形式存储
版本(version):修改一次,就会有一个这个数据的版本,默认保存保存一个版本,也就是当前的版本,一般会自定义3,即保存当前的和上次修改和上上次修改的数据。
特点:
数据类型单一:无类型定义,只有字符串
大
无模式:每一行都有一个可以排序的主键和任意多的列,列可以根据需要动态增加,同一张表中不同的行可以有截然不同的列。
稀疏:对于为空(null)的列,并不占用存储空间。
顺序:每个 Cell中,不同版本的数据按照时间戳降序排序,即最新的数据排在最前面。
常用命令;
#查看帮助手册
hbase
#进入客户端,任意一台服务器
hbase shell
#一下命令全是进入客户端之后的:
#如果要删除输入的命令:ctrl+backspace
#全部帮助信息
help
#ddl组的帮助信息
help 'ddl'
#一个命令的帮助信息
help 'list'
#查看状态
status
DDL操作:
#ddl组
#区分大小写
#创建表,指定表名,和列簇
create 'student','base_info','course_info'
#指定版本号,关键字都是大写
create 'stu_version', {NAME=>'base_info',VERSIONS=>2},{NAME=>
'course_info',VERSIONS=>1}
#查看表
list
#查看表结构:describe '表名'
describe 'student'
#修改表
alter 'stu_version',{NAME=>'course_info',VERSIONS=>3}
#删除列簇
alter 'student',{NAME=>'course_info',METHOD=>'delete'}
#删除表:先禁用后删除
disable 'student'
drop 'student'
#查看表是否存在
exists 'student'
#查看是否被禁用
is_disabled 'stu_version'
#差看是否不禁用
is_enabled 'stu_version'
enable 'stu_version'
DML操作:
#添加数据 put表名,rowkey
put 'stu_version','1001','base_info:name','jack'
put 'stu_version','1001','base_info:age',22
put 'stu_version','1001','course_info:math','100'
put 'stu_version','1001','course_info:english','80'
put 'stu_version','1002','base_info:name','tom'
put 'stu_version','1002','base_info:age',23
put 'stu_version','1002','course_info:english','80'
put 'stu_version','1003','base_info:name','ella'
put 'stu_version','1003','base_info:age',22
put 'stu_version','1003','course_info:math','90'
#查询数据
scan 'stu_version'
#前两行
scan 'stu_version',{LIMIT=>2}
#查看base_info:name的前两行
scan 'stu_version',{COLUMNS=>'base_info:name',LIMIT=>2}
#根据行键获取一行的数据
get 'stu_version','1001'
#根据行键和列簇
get 'stu_version','1001','base_info'
get 'stu_version','1001','base_info:name'
#查看行数
count 'stu_version'
#修改数据
put 'stu_version','1001','course_info:math',90
get 'stu_version','1001','course_info:math'
#查看多个版本的数据
#根据时间戳,不好用
get 'stu_version','1001',{COLUMNS=>'course_info:math',TIMESTAMP=>1542251077928}
#获取最新的两个版本,按照时间戳降序排序
get 'stu_version','1001',{COLUMNS=>'course_info:math',VERSIONS=>2}
#删除数据
#删除列
delete 'stu_version','1001','course_info:math',1542251943336
#删除所有的版本
delete 'stu_version','1001','course_info:math'
#删除行
deleteall 'stu_version','1001'
scan 'stu_version'
#清空表
truncate 'stu_version'
如果有问题,请提出,谢谢。