HBase读写流程
写在前面
- 老版本的读写框架为zk-root-meta表-数据所在的region(在这不做介绍)
- 新版本的读写框架为zk-meta表-数据所在的region(本篇的流程)
HBase建表流程简易版
- 平时各个resigonserver 向Hmaster发送心跳:报告在磁盘 有哪些region等等
- 建表时Hmaster决定regionserver 中的region中
- 然后类似写流程
HBase写数据流程
HLog(write ahead log):
也称为WAL意为Write ahead log,类似mysql中的binlog,用来做灾难恢复时用,HLog记录数据的所有变更,一旦数据修改,就可以从log中进行恢复。
- Client从ZK上找到meta表的位置
- Client通过namespace、表名和rowkey找到对应的region
- Client找到这个region对应的HRegionServer,发送请求
- Client将写数据操作写到HLog中,将数据写到memstore中。
- 数据写到memstore成功即返回写入成功,而不必等待数据落地到磁盘。此处和其他框架不太一样。
- memstore达到阈值后把数据刷写到磁盘,生成storefile
- 删除HLog中的操作数据
手绘版
HBase读数据流程
Hbase集群,只有一个meta表,该表的信息存储在zk上。meta表只有一个region,该region数据保存在某一个HRegionServer上
该meta表可能达到几十G,而ZK只是简版的文件系统,用来存储其他分布式框架的比较小的元数据信息,所有meta表存储在HRegionServer上
- Client从ZK下的
/Hbase/meta-region-server中获得HBase:meta表所在的region在哪个HResigonServer上和它的具体位置 - Client根据要查询的namespace、表名和rowkey信息从
HBase:meta获得要查询的数据表所在的region信息(在哪个HRegionServer,在HRegionServer的哪个region等等) - Client找到对应的HRegionServer
- Client找到对应的region
- 从memstore查找数据,找不到就从blockcache上查找数据,仍然找不到数据再去storeFile上查找数据
- HBase上的HRegionServer级别的内存有两部分:
- memstore,主要用来写数据
- blockcache,主要用来读取数据
- HBase上的HRegionServer级别的内存有两部分:
- 若数据从storeFile找到的,则将数据缓存到blockcache上。可以加快后续查询