HBase架构组成AND读写总结(1)
文章目录
官网链接请戳:HBase
Architecture Overview
推荐图书:《HBase权威指南》
HBase架构组成
HBase采用Master/Slave架构
搭建集群,它隶属于Hadoop生态系统
,由一下类型节点组成:HMaster节点、HRegionServer节点、ZooKeeper集群,而在底层,将数据存储于HDFS中
,因而涉及到NameNode、DataNode等
-
ZooKeeper
-
实现HMaster的高可用;
-
记录ROOT表的存储位置,ROOT找到META表位置,META表中的信息确定用户数据存放的位置(region);
-
监控HRegionServer的状态(当挂了的时候,zk负责向HMaster报告)
-
-
HMaster
- 为RegionServer分配region,故障转移;
- 负责RegionServer的负载均衡(regionServer中region的均匀分布)
-
HRegionServer
-
维护region,处理对这些region的IO请求;
-
负责切分在运行过程中变的过大的region;
-
一个table,最初是一个region,随着表增大,分裂出多个region,
每个Hregion对应一个region,每个Hregion包含一个或多个Store,每个Store保存一个列族
每个Store由一个memstore、0至多个storefile,storefile以Hfile格式存在HDFS中
; -
BlockCache 读缓存、memstore 写缓存;
-
HLog记录数据的变更信息,用来做数据恢复。
-
HBase的读写底层实现过程
-
写过程
-
找到对应RegionServer,发送写请求
:客户端访问ZooKeeper,查找ROOT表,获得META表信息,从META表查找,获取存在目标数据的Region信息,从而找到对应的RegionServer并发送写请求; -
将数据分别写到HLog和MemStore上各一份
; -
MemStore达到一个阈值
后则把数据刷成一个StoreFile
文件(若MemStore中的数据有丢失,则从HLog中恢复) - 当
多个Hfile文件达到一定大小
后,会触发Compact
合并操作,合并为一个storeFile
; - 当
StoreFile大小超过一定阈值
后,会把当前region切分(Split)为两个
,并由HMaster分配到相应的HRegionServer
,实现负载均衡。
-
-
读过程
-
找到对应的RegionServer并发送读请求
:客户端访问ZooKeeper,查找ROOT表,获得META表信息,从META表查找,获取存在目标数据的Region信息,从而找到对应的RegionServer并发送读请求; - 读请求
先去MemStore中查数据
,查不到就到BlockCache中查
,再查不到就到StoreFile上读,并把读的结果放入BlockCache
。
BlockCache采用LRU策略和分级缓存策略,当BlockCache的大小达到上限后,会触发缓存淘汰机制,将最老的一批数据淘汰掉。
-