文章目录
- 前言
- 一、HBase的架构
- (一)Client
- (二)Master Server
- (三)Region Server
- 二、HBase的工作原理
- (一)存储数据流程
- (二)读取数据流程
- (三)MemStore的溢写合并
前言
#博学谷IT学习技术支持#
上一篇文章主要探讨HBase基础知识,本篇文章探讨HBase更加深层次的知识,主要有HBase的架构,底层原理和读写流程等,如果有不准确的地方,请不吝赐教。
一、HBase的架构
HBase结构主要包含Client,Master Server和Region Server三大部分:
(一)Client
客户端,主要发起HBase操作的请求
(二)Master Server
Master Server主要负责管理工作,主要作用如下:
- 管理集群中众多从节点
- 管理HBase的元数据
- 负责分配Region到各个从节点中
- 保证Region的负载均衡
(三)Region Server
- 数据处理主要由Region Server负责,其工作如下:
- 管理主节点分配的Region
- 负责数据的读写操作
- 负责向主节点汇报元数据信息
- Region Server结构
Region Server包含了大量的组件,如Region、Store、StoreFile等,所有组件各司其职,共同协作保证RegionServer的正常运行,接下来对各个组件做进一步的说明:
- Region
在HBase中,表被横着划分为很多个Region - Store
Region按照列族将HBase的表划分为一个一个Store,理论上一个列族就是一个Store
3. MemStore
MemStore与缓存内存相似,往HBase写入数据时,数据会先写入到MemStore中,当MemStore中是数据量达到一定阈值或者一段时间,会触发RegionServer的Flush刷写机制,将MemStore中的数据写入到StoreFile中,以达到持久化存储。
4. StoreFile
MemStore中的数据达到一定阈值时,会将数据写入到StoreFile中,其底层以HFile的格式存储。
5. WAL
每个Region Server中都有一个HLog的实例,HLog机制是WAL预写日志的一种实现方式,WAL全称为Write Ahead Log,其最大的作用就是故障恢复,往HBase写数据时,会先写到HLog中,然后再写入到MemStore,最终才会将数据写入到持久化的StoreFile中,当写入数据时Region Server宕机,若数据没有写入到HFile或者MemStore中的数据还未保存到StoreFile中,此时若没有WAL机制就会造成数据丢失,WAL机制保证了写数据的可靠性。
二、HBase的工作原理
(一)存储数据流程
存储数据主要分为两个部分,一部分是客户端的流程,另一部分是服务端的流程,详细流程如下:
客户端:
- 客户端发起写入数据的请求;
- 连接Zookeeper获取hbase:meta表所在的Region Server地址;
- 客户端连接meta表所在的Region Server,根据meta获取目标表对应要写入数据的Region地址(基于Region的StartKey和EndKey来确定)
- 连接Region对应的Region Server,开始进行数据写入
- 首先会将数据写入到对应Region Server的HLog中,然后再将数据写入到对应Region的Store模块的MemStore中,当这两个地方都已经完成数据的写入,Client客户端就认为数据已经写入成功。
服务器端: - 客户端不断进行数据的写入,Region Server的MemStore中的数据量不断增加,数据量到达一定阈值(默认128M或1小时),会触发Flush刷新机制,将数据写入到HDFS中,形成StoreFile文件;
- 随着数据的不断写入,StoreFile越来越多,当StoreFile文件达到一定的数量(3个及以上),此时会触发Compact合并压缩机制,将多个StoreFile文件合并成一个较大的HFile文件
- 数据不断进行合并,HFile文件越来越大,达到一定大小(默认为10G)后会触发Split分裂机制,将HFile一分为二,此时Region也会跟着拆分成两个新的Region,每个新的Region管理各自的HFile文件,旧的Region就会下线。
- 随着客户端不断进行数据的写入,Region不断进行拆分,Region的数量也就越来越多。
(二)读取数据流程
- Client客户端访问Zookeeper获取HBase:meta表所在的Region Server地址;
- 连接meta表对应的Region Server,访问meta表获取目标数据存储的Region Server地址;
- 访问目标数据所在的Region Server,根据meta表中存储的元数据(nameSpace、表名和rowKey)查找对应Region;
- 先查询MemStore中是否存在目标数据,若没有找到再查找StoreFile文件中的数据
(三)MemStore的溢写合并
当MemStor写入的数据过多时,会触发flush溢写操作,进行文件的溢写形成一个StroeFile,当溢写的文件过多时,会触发Compact合并操作,将StoreFile文件合并成HFile文件。
- 触发的条件
-
当MemStore大小达到设定的值时,默认为128M,则触发Region级别的Flush溢写;
-
MemStore存活时间超过设定的时间时,默认1小时,也会触发RegionServer级别的Flush刷写