Hbase学习之简单操作

使用

Hbase是一个高可靠性、高性能、可伸缩、分布式、基于列存储的非关系型(NoSQL)数据库。hbase将数据存储在HDFS集群上,备份机制齐全。通过 ZooKeeper 协调查找数据,访问速度快。

架构

Hbase学习之简单操作

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'

如果有问题,请提出,谢谢。