写在前面

  • 老版本的读写框架为zk-root-meta表-数据所在的region(在这不做介绍)
  • 新版本的读写框架为zk-meta表-数据所在的region本篇的流程

HBase建表流程简易版

  • 平时各个resigonserver 向Hmaster发送心跳:报告在磁盘 有哪些region等等
  • 建表时Hmaster决定regionserver 中的region中
  • 然后类似写流程

HBase写数据流程

HBase-6 HBase读写流程

HLog(write ahead log):
也称为WAL意为Write ahead log,类似mysql中的binlog,用来做灾难恢复时用,HLog记录数据的所有变更,一旦数据修改,就可以从log中进行恢复。

  1. Client从ZK上找到meta表的位置
  2. Client通过namespace、表名和rowkey找到对应的region
  3. Client找到这个region对应的HRegionServer,发送请求
  4. Client将写数据操作写到HLog中,将数据写到memstore中。
    • 数据写到memstore成功即返回写入成功,而不必等待数据落地到磁盘。此处和其他框架不太一样。
  5. memstore达到阈值后把数据刷写到磁盘,生成storefile
  6. 删除HLog中的操作数据

手绘版

HBase-6 HBase读写流程

HBase读数据流程

HBase-6 HBase读写流程

Hbase集群,只有一个meta表,该表的信息存储在zk上。meta表只有一个region,该region数据保存在某一个HRegionServer上
该meta表可能达到几十G,而ZK只是简版的文件系统,用来存储其他分布式框架的比较小的元数据信息,所有meta表存储在HRegionServer上

  1. Client从ZK下的/Hbase/meta-region-server中获得HBase:meta表所在的region在哪个HResigonServer上和它的具体位置
  2. Client根据要查询的namespace、表名和rowkey信息从HBase:meta获得要查询的数据表所在的region信息(在哪个HRegionServer,在HRegionServer的哪个region等等)
  3. Client找到对应的HRegionServer
  4. Client找到对应的region
  5. 从memstore查找数据,找不到就从blockcache上查找数据,仍然找不到数据再去storeFile上查找数据
    • HBase上的HRegionServer级别的内存有两部分:
      • memstore,主要用来写数据
      • blockcache,主要用来读取数据
  6. 若数据从storeFile找到的,则将数据缓存到blockcache上。可以加快后续查询

相关文章:

  • 2021-05-18
  • 2021-07-25
  • 2022-01-05
  • 2021-08-02
猜你喜欢
  • 2022-01-05
  • 2022-01-05
  • 2022-01-05
  • 2021-12-08
  • 2021-06-09
相关资源
相似解决方案