Hbase数据存储图解与流程

 

一、Hbase数据存储图解

 

Hbase图 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