1.读流程

image.png
1.Client先访问zookeeper,通过/hbase/meta-region-server节点下查询到系统表meta的regionserver
2. 找到对应的regionServer,找到hbase:meta表数据根据namespace,rowkey,确定region及对应的regionserver
3.加载storefile和memstore数据,merge数据根据时间戳返回数据。(如果blockcache中存在storefile的文件那么可以不读storefile否则还是要读,总之hbase是一个写快读慢的框架)

2.写流程

image.png

  1. Client先访问zookeeper,通过/hbase/meta-region-server节点下查询到系统表meta的regionserver 找到对应的
  2. regionServer,找到hbase:meta表数据根据namespace,rowkey,确定region及对应的regionserver
  3. Client连接对应的RegionServer上将数据写到HLog(write ahead log)的buffer并不会异步到磁盘中
  4. 然后再将数据接入到对应的region的store(其实时memstore)
  5. 写入memstore成功后将HLog中的buffer数据异步到磁盘,然后滚动版本这时候scan就可以查到
  6. 写入memstore过程中达到阈值(128M | 1h ) 将会触发flush线程,将文件刷写到hdfs形成storefile
  7. 当storefile达到阈值大于3个将触发compact,合并文件。。。待续

    3.数据flush过程

  8. 当MemStore数据达到阈值(默认是128M,老版本是64M),将数据刷到硬盘,将内存中的数据删除,同时删除HLog中的历史数据;

  9. 并将数据存储到HDFS中;
  10. 在HLog中做标记点。

    4.数据合并过程

  11. 当数据块达到3块,Hmaster触发合并操作,Region将数据块加载到本地,进行合并;

  12. 合并的数据超过256M,进行拆分,将拆分后的Region分配给不同的HregionServer管理;
  13. 当HregionServer宕机后,将HregionServer上的hlog拆分,然后分配给不同的HregionServer加载,修改.META.;
  14. 注意:HLog会同步到HDFS。