天天看点

HBase核心功能模块--读书笔记

HBase核心功能模块--读书笔记

客户端Client

客户端 Client 是整个 HBase 系统的入口。使用者直接通过客户端操作 HBase。客户端

使用 HBase 的 RPC 机制与 HMaster 和 RegionServer进行通信。对于管理类操作Client 与

HMaster 进行 RPC 通信对于数据读写类操作Client 与RegionServer 进行 RPC 交互。这里

客户端可以是多个并不限定是原生 Java 接口还有 Thrift、Avro、Rest等客户端模式甚

至 MapReduce 也可以算作一种客户端。

协调服务组件Zookeeper

ZooKeeper Quorum队列负责管理 HBase 中多 HMaster 的选举、服务器之间状态同

步等。再具体一些就是HBase 中 ZooKeeper 实例负责的协调工作有存储 HBase 元数据信

息、实时监控 RegionServer、存储所有 Region 的寻址入口当然还有最常见的功能就是保证

HBase 集群中只有一个HMaster 节点

主节点Hmaster

HMaster 没有单点问题在HBase 中可以启动多个 HMaster通过ZooKeeper 的 Master

选举机制保证总有一个 Master 正常运行并提供服务其他 HMaster 作为备选时刻准备当目

前 HMaster 出现问题时提供服务。HMaster 主要负责Table 和 Region 的管理工作

管理用户对 Table 的增、删、改、查操作。

管理 RegionServer 的负载均衡调整 Region 分布。

在 Region 分裂后负责新 Region 的分配。

在 RegionServer 死机后负责失效 RegionServer 上的 Region 迁移。

Region 节点 HRegionServer

HRegionServer 主要负责响应用户 I/O 请求向 HDFS 文件系统中读写数据是 HBase

中最核心的模块。HRegionServer 内部管理了一系列 HRegion对象每个 HRegion 对应了

Table 中的一个Region。HRegion 由多个HStore 组成每个 HStore 对应了Table 中的一个

Column Family 的存储。可以看出每个 Column Family 其实就是一个集中的存储单元因

此最好将具备共同 I/O 特性的列放在一个 Column Family 中这样能保证读写的高效性。

HStore 存 储 是 HBase 存 储 的 核 心 由 两 部 分 组 成MemStore 和

StoreFile。MemStore是 Sorted Memory Buffer用户写入的数据首先会放入 MemStore 中当

MemStore 满了以后会缓冲flush成一个 StoreFile底层实现是 HFile 当 StoreFile 文件数

量增长到一定阈值会触发 Compact 操作将多个StoreFiles 合并成一个 StoreFile在合并

过程中会进行版本合并和数据删除因此可以看出 HBase 其实只有增加数据所有的更新和

删除操作都是在后续的 Compact 过程中进行的这使得用户的写操作只要进入内存中就可以

立即返回保证了 HBase I/O 的高性能。

HBase核心功能模块--读书笔记

StoreFiles 在触发 Compact 操作后会逐步形成越来越大的 StoreFile当单个StoreFile

大小超过一定阈值后会触发 Split 操作同时把当前Region 分裂成 2 个 Region父 Region

会下线新分裂的 2 个子 Region 会被HMaster 分配到相应的 HRegionServer 上使得原先 1

个 Region 的压力得以分流到 2 个 Region 上。

每个 HRegionServer 中都有一个 HLog 对象HLog 是一个实现 Write Ahead Log 的类

在每次用户操作写入 MemStore 的同时也会写一份数据到HLog 文件中HLog 文件定期

会滚动出新并删除旧的文件已持久化到 StoreFile 中的数据 。在 HRegionServer 意外终

止后HMaster 会通过 ZooKeeper 感知到首先处理遗留的 HLog 文件将其中不同 Region

的 Log 数据进行拆分分别放到相应 Region 的目录下然后再将失效的 Region 重新分配

领取到这些 Region 的 HRegionServer 在加载 Region 的过程中会发现有历史 HLog 需要处

理因此会将 HLog 中的数据回放到 MemStore 中然后缓冲flush到 StoreFiles完成数

据恢复。