架构图
- hbase顶层存储依赖于HDFS存储,依赖于zookeeper进行管理协助
- hbase自身有两个核心组件:HMaster以及HRegionServer。HMaster管理ddl操作以及namespace的操作。RegionServer管理dml的操作以及管理源数据。
- 一个RegionServer维护多个HRegion,RegionServer通过HLog完成数据的预写操作,一个HRegion中有列族,列族用于存储数据。Store存储是隔离的,对应hdfs上不同的文件夹。
- 数据存储存储在两个地方:一个是内存、另一个是磁盘。
- HBase以HFile的存储格式 存储数据(HFile同parquet和orc,是一类数据格式),HFile以键值对的形式存储
架构详解
-
Client
Client包含了访问Hbase的接口,另外Client还维护了对应的cache来加速Hbase的访问,比如cache的.META.元数据的信息。
-
Zookeeper
所有客户端请求都通过zookeeper,操作实际数据的增删改查,HMaster挂掉读写也会正常进行。
连接hbase集群,连接地址只需要连接zookeeper
HBase通过Zookeeper来做master的高可用、RegionServer的监控、元数据的入口以及集群配置的维护等工作。
具体工作如下:
- 通过Zoopkeeper来保证集群中只有1个master在运行,如果master异常,会通过竞争机制产生新的master提供服务
- 通过Zoopkeeper来监控RegionServer的状态,当RegionSevrer有异常的时候,通过回调的形式通知Master RegionServer上下线的信息
- 通过Zoopkeeper存储元数据的统一入口地址
- 客户端请求到zookeeper不经过HMaster的,即客户端请求找HMaster和HRegion都是通过zookeeper来找,不经过Hmaster。操作实际数据的增删改查操作都是zookeeper交互完成。
-
Hmaster
master节点的主要职责如下: 为RegionServer分配Region 维护整个集群的负载均衡 维护集群的元数据信息 发现失效的Region,并将失效的Region分配到正常的RegionServer上 当RegionSever失效的时候,协调对应Hlog的拆分
-
HRegionServer
HRegionServer包含HLlog(保障内存中的数据不会丢失)、HRegion。
HReginServer 通过HLog,即WAL 预写入日志。
一个HReginServer维护多个HRegin。
HregionServer直接对接用户的读写请求,是真正的“干活”的节点。它的功能概括如下: 管理master为其分配的Region 处理来自客户端的读写请求 负责和底层HDFS的交互,存储数据到HDFS 负责Region变大以后的拆分 负责Storefile的合并工作
-
HRegin
一个HRegin有多个Store。Store在存储上是隔离的,即在HDFS上存储在不同文件夹中
Store的实际存储存储在两个地方:内存和磁盘中。
-
HDFS
HDFS为Hbase提供最终的底层数据存储服务,同时为HBase提供高可用(Hlog存储在HDFS)的支持,具体功能概括如下: 提供元数据和表数据的底层分布式存储服务 数据多副本,保证的高可靠和高可用性