HBase 学习笔记之 二
前言
上一篇讲述了 HBase 与 RDBMS 的区别,以及其解决了 RDBMS 的那些问题,这一篇详细讲述一下 HBase 的数据结构以及其组织架构
HBase 数据模型
-
Namespcae: 命名空间 ,类似于关系型数据库的 DatabBase 概念,每个命名空间下有多个表。 HBase 有两个自带的命名空间,分别是 hbase 和 default, hbase 中存放的是 HBase 内置的表,
default 表是用户默认使用的命名空间。 -
Region:RDBMS 中表的概念,或可进一步理解为分区的概念,由于表的数据行会有很多存储在一起会影响效率,因此 HBase 会将数据按照 region 为单位分别存储即类似与 Hive 中的 partition。
HBase 表的基本由三个元素组成:
-
RowKey:相当于 RDBMS 中的主键,其唯一标识了一条记录,需要注意的是在 HBase 中 RowKey 是排序的,默认按照字典序排序。
-
ColumnFamily:HBase 表中的列族,其可以理解为一类属性的抽象,在创建表时可以不指定列但必须指定列族
-
Qualifier:列标识符,这就是 RDBMS 中列的概念,但是在 Hbase 中并不是每条记录的相同列族下都具有相同个数的 qualifier 其可以根据当前记录的特性动态的伸缩,在列族下可以指定任意多的列且空列不会占据存储空间
下图展示了 Hbase 表中一条数据的形式:
-
-
Timestamp
用于标识数据的不同版本(version), 每条数据写入时, 如果不指定时间戳, 系统会
自动为其加上该字段,其值为写入 HBase 的时间 。 -
Cell
由 {rowKey, columnFamily : qualifier, timestamp} 唯一确定的单元,其存储的全为字节数组没有具体的数据格式。
HBase 组织架构
总体架构
从上图可以看到 HBase 是由 Client,Zookeeper,HMaster,HRegionServer,HDFS 等组成,接下来分别介绍这些组件的职能或功能:
-
Client
客户端,Client 提供了访问 Hbase 的接口,使用户能够通过其来对 Hbase 进行一系列操作,此外在访问过程中 Client 还会维护一个 cache 其中保存一些元数据例如 hbase:meta-region-server,来加速其与 Hbase 交互的速度。
-
Zookeeper
HBase通过Zookeeper来做master的高可用、RegionServer的监控、元数据的入口以及集群配置的维护等工作。具体工作如下:
- 通过Zoopkeeper来保证集群中只有1个master在运行,如果master异常,会通过竞争机制产生新的master提供服务
- 通过Zoopkeeper来监控RegionServer的状态,当RegionSevrer有异常的时候,通过回调的形式通知Master RegionServer上下线的信息
- 通过Zoopkeeper存储元数据的统一入口地址
-
HMaster
HMaster 所有 Region Server 的管理者,其职能如下:
- 为RegionServer分配Region
- 维护整个集群的负载均衡
- 维护集群的元数据信息
- 发现失效的Region,并将失效的Region分配到正常的RegionServer上
此外其还提供了对表的操作: create, delete, alter
-
HRegionServer
HRegionServer 直接与 Client 交互处理用户的读写请求,其具体功能如下:
- 管理 HMaster 为其分别的 region
- 处理 Client 的读写请求,提供数据操作:put,get,delete
- 负责 regionSplit (拆分大 region) 和 storeFileCompact (合并小文件)
- 与 HDFS 交互将数据存储到 HDFS 上
-
HDFS
HDFS 为 Hbase 提供了数据存储服务,其具体职责如下:
- 提供元数据和表数据的底层分布式存储服务
- 数据多副本,保证的高可靠和高可用性
HRegionServer 中的组件
从上一节的总体架构可以发现在 Hbase 中 HRegionServer 是一个重要的组件,其负责了数据的存储也负责处理我们的读写请求,而其也是由一些组件组成这一节就来详细讲讲这些组件的作用,先补一张图增加一下可读性。
可以看到 HRegionServer 由 HRegion(Region),Store,HLog,MemStore,StoreFile 组成,来详细看看他们各自的功能。
-
HRegion(Region)
Hbase 中表的切片也可理解为分区,Hbase 会根据一定的规则将不同的 rowKey 存储在不同的 region中,而 region 保存在 HRegionServer 中,一个 HRegionServer 中可存储多个 region
-
Store
Hbase 中存储 ColumnFamily 的地方,一个 Store 对应一个列族
-
StoreFile 和 HFile
StoreFile 是 Store 将数据存储在 HDFS 上的文件,其底层以 HFile 格式保存 HFile 是 key value数据的存储格式
-
Mem Store
故名思意是内存空间,其会保存当前的数据操作以增加性能,在写入数据时其会将数据按照 RowKey 先进行排序然后在写入 HFile 中
-
HLog
件,其底层以 HFile 格式保存 HFile 是 key value数据的存储格式
-
Mem Store
故名思意是内存空间,其会保存当前的数据操作以增加性能
-
HLog
HLog 又名 write-ahead logs,其作用为防止数据丢失,在向 Hbase 写入数据的过程中如果直接写入磁盘那么性能势必很低,因此会先向 Mem Store 中写入,在由 Mem Store 写入 HFile 中,而由于是保存在内存中则就会存在数据因为故障丢失的风险,由此 Hbase 在写入数据过程中先向 HLog 中高速的顺序写入数据,而后再将 HLog 中的数据写入 Men Store 中,由于 HLog 是保存再 HDFS 上的文件因此再发生故障时可以通过其来还原数据从而保障了数据不丢失。
总结
本篇介绍了 HBase 的数据模型及整体架构,架构方面的内容是后续理解 Hbase 读写流程的基础因此较为重要,下一篇就写一写 Hbase 的数据读写流程吧。