1. Hbase定义
Hbase是分布式,可扩展,支持海量数据存储的NoSql数据库。 HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统
2. Hbase数据模型
逻辑上,HBase的数据模型同关系型数据库很类似,数据存储在一张表中,有行有列。但从HBase的底层物理存储结构(K-V)来看,HBase更像是一个multi-dimensional map。
1. Hbase逻辑架构
2. Hbase物理存储结构
3. 数据模型
-
NameSpace
命名空间,类似于关系型数据库database的概念,每个命名空间下有多个表,Hbase默认自带2个NameSpace,非别是Hbase和default,hbase存放Hbase内置表,default是用户默认使用的命名空间。
-
Region
类似于关系型数据库中的表概念,Hbase定义表时,只需要声明列族,不需要声明具体的列,这意味着,往HBase写入数据时,字段可以动态、按需指定。因此,和关系型数据库相比,HBase能够轻松应对字段变更的场景。
- Row
HBase表中的每行数据都由一个RowKey和多个Column(列)组成,数据是按照RowKey的字典顺序存储的,并且查询数据时只能根据RowKey进行检索,所以RowKey的设计十分重要。
-
Column
HBase中的每个列都由Column Family(列族)和Column Qualifier(列限定符)进行限定,例如info:name,info:age。建表时,只需指明列族,而列限定符无需预先定义。
-
Time Stamp 用于标识数据的不同版本(version),每条数据写入时,如果不指定时间戳,系统会自动为其加上该字段,其值为写入HBase的时间。
3. Hbase基本架构
架构角色
- Region Server
Region Server为 Region的管理者,其实现类为HRegionServer,主要作用如下:
- 对于数据的操作:get, put, delete;
- 对于Region的操作:splitRegion、compactRegion。
- Master
Master是所有Region Server的管理者,其实现类为HMaster, 主要作用如下:
- 对于表的操作:create, delete, alter
- 对于RegionServer的操作:
- 分配regions到每个RegionServer,
- 监控每个RegionServer的状态,
- 负载均衡和故障转移。
- Zookeeper
HBase通过Zookeeper来做
- Master的高可用、
- RegionServer的监控、
- 元数据的入口以及集群配置的维护等工作。
HBase在zookeeper节点上存放的信息
- HDFS
HDFS为HBase提供最终的底层数据存储服务,同时为HBase提供高可用的支持。
- client
包含了访问Hbase的接口,维护相应的cache来加速Hbase访问,(比如读写流程中,cache缓存了.mate元数据信息)
4. HBase中的角色
- HMaster
功能
- 监控RegionServer
- 处理RegionServer故障转移
- 处理元数据的变更
- 处理region的分配或转移
- 在空闲时间进行数据的负载均衡
- 通过Zookeeper发布自己的位置给客户端
- RegionServer
功能
- 负责存储HBase的实际数据
- 处理分配给它的Region
- 刷新缓存到HDFS
- 维护Hlog
- 执行压缩
- 负责处理Region分片
- Write-Ahead logs(WAL)
HBase的修改记录,当对HBase读写数据的时候,数据不是直接写进磁盘,它会在内存中保留一段时间(时间以及数据量阈值可以设定)。但把数据保存在内存中可能有更高的概率引起数据丢失,为了解决这个问题,
数据会先写在一个叫做Write-Ahead logfile的文件中,然后再写入内存中。所以在系统出现故障的时候,数据可以通过这个日志文件重建。
- Region
Hbase表的分片,HBase表会根据RowKey值被切分成不同的region存储在RegionServer中,在一个RegionServer中可以有多个不同的region。
- store
HFile存储在Store中,
一个Store对应HBase表中的一个列族(列簇, Column Family)。
- MemStore
就是内存存储,位于内存中,用来保存当前的数据操作,所以当数据保存在WAL中之后,RegsionServer会在内存中存储键值对。
- HFile
这是在磁盘上保存原始数据的实际的物理文件,是实际的存储文件。StoreFile是以Hfile的形式存储在HDFS的。