写流程:

hbase hfile写入 hbase的写入流程_hbase hfile写入

 

1:Client先访问zookeeper,得到对应的RegionServer地址

2:Client对RegionServer发起写请求,RegionServer接受数据写入内存

3:当MemStore的大小达到一定的值后,flush到StoreFile并存储到HDFS

hbase hfile写入 hbase的写入流程_数据_02

 

Region是hbase存储数据的基本单元,数据都存储在Region中,每一个Region只存储一个columnFamily(列族)的数据,而且只是这个列族的一部分,当Region的大小达到某个阈值之后,会根据rowkey的排序,划分为多个Region,每个Region中包含多个Store对象,每个Store对象包含一个memStore和一个或多个Store File,memStore是数据在内存的实体,并且一般是有序的,当有数据写入的时候,回先写入到memStore中,当memStore的大小达到上限之后,Store会创建StoreFile,StoreFile便是Hfile的一层封装。

Hbase保证内存中的数据不会丢失,是使用HLog,HLog是WAL(预写日志)的一种实现,RegionServer将更新操作记录到memStore,然后更新到HLog中,只有当更新到HLog中成功后,这条记录才算真正成功的写入,当memStore数据丢失,可以使用HLog找回,注意,一般的WAL是先写入日志再写入内存,但是Hbase是先写入内存后写入日志

4-Hbase读数据流程

hbase hfile写入 hbase的写入流程_hbase hfile写入_03

 

1:client先访问zookeeper,得到对应的RegionServer地址

        访问zookeeper中的meta得到RegionServer的节点信息,将               hbase的meta表缓存到本地,再根据meta表获取要访问的表所           对应的RegionServer的信息,

2:Client对RegionServer发起读请求

3:当RegionServer收到Client的读请求后,先扫描自己的MemStore,在扫描BlockCache(加速读内容缓存区),如果还没有找到则StoreFile中读数据,然后将数据返回给Client

注意:client读写数据并没有访问Hmaster,只需要访问zookeeper就可以了,原因在于:Hmaster启动的时候会把meta的信息表加载到zookeeper中,meta表记录了hbase所有的表所有的region的详细信息,例如region开始的key,结束的key,所在regionServer的地址,habse的meta表就相当于一个目录,通过meta表可以快速定位数据的实际位置,座椅读写操作只需要与zookeeper和对应的RegionServer进行交互就可以了,Hmaster只负责维护table和region的元数据信息,协调各个regionServer,这样Hmaster的负载就小了很多