Hbase数据存储图解与流程
一、Hbase数据存储图解
二、hbase表数据的检索流程图(读和写的流程)
1、hbase在Hadoop集群中的物理架构
由图中可以看出,存储模块主要包括了ZooKeeper集群、HMaster、HRegionServer。
ZooKeeper:
Hbase是强依赖于ZooKeeper,我们读或写一个表的数据,都会优先访问ZooKeeper。
通常是集群中单独的3/5台服务器。
HMaster通常是Hadoop集群中的一台或两台(backup-Master)。
HRegionServer通常是Hadoop集群中的部分或全部
HRegionServer通常和datanode部署在同一台服务器上
比如datanode是10个
HRegionServer可以是10个或小于10个
2、hbase架构图重要组件的名称及作用
client:
读/写访问hbase的用户
ZooKeeper:
基于观察者模式监控master和regionserver运行状态,保证hbase的高可用性,这是因为hbase是强依赖于ZooKeeper的。
存储了hbase的寻址入口
存储了hbase表的meta元数据表的位置信息
Meta也是一张表,meta表一般只有一个region
region存在哪台regionserver上
meta元数据表存储了哪些信息:
一张表有哪些reigon
region分别分配到哪些regionserve上r
每个reigon的startkey和stopkey的大小
master:
管理regionserver并分配表的region给regionserver
对集群的region的数量进行负载均衡管理
master会借助ZooKeeper感知regionserver的上线和下线
master一般会有两台(backup-Master),保证master的高可用性
master不参与hbase表数据的读和写,负载通常比较低
master宕机一段时间内集群可以保持正常的读写
regionserver:
管理所在服务器节点上的所有region
负责响应客户端的读写请求(IO)
三大机制(flush、compact、split)
Hlog:
预写日志
用来临时保存写入到memstore中的数据,防止宕机造成memstore中的数据丢失
Hadoop:
利用hdfs给hbase提供存储,hbase是相当于Hadoop的一个客户端
hdfs上存储了hbase的两种数据:
HFile :
hbase表的数据文件
Hflie文件是Hadoop的二进制格式文件
Hlog :
预写日志
Hlog是Hadoop的sequence格式的文件
3、hbase表数据的写入流程:(根据rowkey进行写入)Georgia
A. client先去访问ZooKeeper,从ZooKeeper上获取meta表的位置信息
i. 以前的版本hbase的系统表除了meta表还有root表
ii. 在root表中存储了meta表的位置信息
iii. 新版本中将meta表的位置信息直接存入ZooKeeper中
B. client向meta表的region所在的regionserver发起访问,读取meta表的数据,获取了hbase集群上所有的表的元数据
C. 根据meta表的元数据信息(某张表有几个region及region如何分配及每个reigon的startkey和stopkey),client找到当前要写入的表对应的region及所在regionserver信息
D. client向对应的regionserver发起写入请求
E. regionserver收到client请求并响应,client先把数据写入到Hlog防止数据丢失
F. 再把数据写入到memstore内存缓存区(默认大小128M)
G. 当数据写入到Hlog及memstore内存缓存区都成功时,写入才算成功
H. 当memstore达到128M或其他的因素的触发,会将memstore中的数据flush成storeFile
I. 当storeFile越来越多,会触发compact合并,将多个storeFile文件最终合并成一个文件
i. 合并分为minor compact 和major compact
ii. 在大合并期间打上‘删除’标签的cell或者过期的cell会被统一清理
J. 当某个store下的某个storeFile文件的最终合并后的大小达到10G时,会触发整个region的split分割,一个region一分为二,由master进行分配
注意:一个store下面可能有多个storefile
4、hbase表数据的读流程:(根据rowkey读)
1、client先去访问zookeeper,从zookeeper上获取meta表的位置信息
以前的版本hbase的系统表除了meta表还有root表
在root表中存储了meta表的位置信息
新版本中将meta表的位置信息直接存入zookeeper中
2、client向meta表的region所在的regionserver发起访问,读取meta表的数据,获取了hbase集群上所有的表的元数据
3、根据meta表的元数据信息(某张表有几个region及region如何分配及每个reigon的startkey和stopkey),client找到当前要写入的表对应的region及所在regionserver信息
4、client向对应的regionserver发起读请求
5、regionserver收到客户端的读请求,会先扫描memstore,在扫描blockcache(读缓存),没有找到数据后再去读取storeFile文件
6、regionserver将数据响应给client