HBase架构

HBase架构

(一)架构图
HBase架构
HBase架构
Region: 是 HBase 将一个表中的所有数据按照 RowKey 的不同范围进行切割的逻辑单元,每个 Region 负责一定范围数据的读写访问。Region 由 RegionServer 负责管理。HBase 中的 Region的概念就和 HDFS 中的数据块的概念差不多,Region 是 HBase 表切分出来的一个分片。数据块是 HDFS 中的一个大文件切分出来的一个分片。
HMaster: HBase 的主节点,负责整个集群的状态感知、负载分配、负责用户表的元数据(schema)管理(可以配置多个用来实现 HA),HMaster 负载压力相对于 HDFS 的 NameNode会小很多。HBase 的 HMaster 其实就算是宕机一段时间也可以正常对外提供服务的(要搞清楚为什么)。
RegionServer: HBase 中真正负责管理 Region 的服务器,也就是负责为客户端进行表数据读写的服务器。每一台 RegionServer 会管理很多的 Region,一个 RegionServer 上面管理的所有的region不属于同一张表。负责Region的拆分,负责和底层的HDFS的存储交互,负责StoreFile的合并。
ZooKeeper: 整个 HBase 中的主从节点协调,元数据的入口,主节点之间的选举,集群节点之间的上下线感知……都是通过 ZooKeeper 来实现
HDFS: 用来存储 HBase 的系统文件,或者表的 Region 文件
Client: Client 包含了访问 HBase 的接口,另外 Client 还维护了对应的 Cache 来加速 HBase 的访问,比如 Cache 的.META.元数据的信息。
(二)Hbase 存储架构详细描述
HBase中的存储包括:Hmaster,HRegionServer,HRegion,Store,MemStore,StoreFile,HFile,HLog
1. Client 使用Hbase的RPC机制与HMaster,HRegionServer进行通信,Client与Hmaster进行管理类通信,与HRegionServer进行数据操作类通信。
HRegionServer内部管理了一些列HRegion对象,每一个HRegion对应Table中有一个Region。HRegion由多个Store组成。每个Store对应Table中的一个ColumnFamily的存储,即一个Store管理一个Region上的一个列簇。每个Store包含一个MEMStore和0到多个StoreFile。Store是Hbase的存储核心,由MemStore和storeFile组成。
2. MemStore是一个有序的内存缓冲区,用户写入数据首先放入MemStore,当MEMStore满了以后生成一个StoreFile,存储在HFile,当StoreFile数量增到一定阈值,触发Compact合并,将多个StoreFiles合并成一个StoreFile。当StoreFile的总大小超过阈值(hbase.hregion.max.filesize)即触发分裂Split,把当前的Region Split分成两个Region,父Region下线,新split的2个Region被HMaster分配到合适的HRegionServer上,使得原先一个Region的压力得以分流到2个Region上。
3. 数据在写入时,首先预写日志,每个HRegionServer服务的所有Region的写操作日志都存储在一个日志文件Hlog中。数据并非直接写入HDFS,而是等到缓存到一定数量再批量写入,写入完成在日志中做标记。