- 简介:hbase是一个高性能,面向列,高纬度,高可靠的分布式实时性数据库。是一个nosql数据库,数据都存在hdfs上。
1. Hbase的数据模型
-
rowkey
- 是唯一确定的一行数据。
- rowkey最大不能超过64KB。
- 按照字典排序。
- 注意:hbase表的设计本质上就是rowkey的设计,合理的rowkey可以防止热点等问题。
-
列簇和列
- 列族再创建表的时候就需要定义
create tablename ,columnfamliyname
。 - 一个列族的数据放在hdfs的同一个目录下,一个列族下可以有很多列。
- 列是动态添加的,每一行的列名都可以不一样。
- 列族再创建表的时候就需要定义
-
版本号(时间戳)
- 一般默认把时间戳作为版本号。
- 每个单元格中可以有多个版本号。
- 取数据的时候会取当前最新版本号的数据。
-
储存格式:底层储存的格式为字节数组。
2.Hbase的架构
-
Zookeeper
- 保存着table的元数据。
- 是region的寻址入口。
- 实时监控regionserver的上下线信息,并实时通知给master。
- 再集群运行的时候保证只有一台Master在运行。
-
Master
- 管理用户的ddl操作(关于表的操作)。
- 负责RegionServer的负载均衡。
- 为RegionServer分配region。
- 如果有regionserver失效,则把该台机器上的数据拉取到别的机器去。
-
Regionserver
- 负责维护region,处理对这些region的IO请求。
- regionserver负责切分再运行过程中变得过大的region。
-
Region
- 一张表创建的时候是一个region,随着表中数据越来越多,region会被切分,分配到不同的regionserver上,随着table的行不断增多,就会有越来越多的region,这样一张完整的表会被保存再多个regionserver上了。
-
store
- 一个region是由多个store组成的,一个store代表一个列族。
- store包括位于内存中的memstore和storefile,当文件写入的时候,会写入到memstore,当达到一定的阀值的时候会进行溢写,会溢写成一个storefile,storefile会以hfile的形式保存在hdfs上。
- 当文件的数量和文件的大小增长到一定的阀值的时候,会进行合并(小合并和大合并),再合并的过程中会将之前执行的删除等操作正式执行,形成更大的storefile。
- 当一个region所有storefile的大小和数量超过一定阈值后,会把当前的region分割为两个,并由hmaster分配到相应的regionserver服务器,实现负载均衡。
- 客户端再检索数据的时候会先去memstore上去查找(然后去blockcache),如果没有找到,则会去storefile里去查找。