hbase数据读写流程

hbase写数据流程

  • ⾸先从 zk找到meta表的region位置,然后读取meta表中的数据,meta表中存储了用户表的region信息
  • 根据namespace、表名和rowkey信息。找到写入数据对应的 region信息
  • 找到这个region对应的regionServer,然后发送请求
  • 把数据分别写到HLog(write ahead log)和memstore各一份
  • memstore达到阈值后把数据刷到磁盘,⽣成 storeFile文件
  • 删除HLog中的历史数据(已经刷到磁盘的数据)

hbase读数据流程

  • Client 先访问 zookeeper,获取 hbase:meta 表位于哪个 Region Server
  • 访问对应的 Region Server,获取 hbase:meta 表,根据读请求的 namespace:table/rowkey,查询出目标数据位于哪个 Region Server 中的哪个 Region 中。并将该 table 的 region 信息以及 meta 表的位置信息缓存在客户端的 meta cache,方便下次访问。
  • 与目标 Region Server 进行通讯
  • 分别在 Block Cache(读缓存),MemStore 和 Store File(HFile)中查询目标数据,并将查到的所有数据进行合并。此处所有数据是指同一条数据的不同版本(time stamp)或者不同的类型(Put/Delete)。
  • 将从文件中查询到的数据块(Block,HFile 数据存储单元,默认大小为 64KB)缓存到Block Cache
  • 将合并后的最终结果返回给客户端

总结

  • HBase上Regionserver的读写缓存:写缓存为Memstore,主要用来写;读缓存为BlockCache,
  • 一个Regionserver上有一个BlockCache和N个Memstore。
  • 读请求会分别在 Block Cache(读缓存),MemStore 和 Store File(HFile)中查询目标数据,并将查到的所有数据进行合并,返回给客户端。因为有时间戳的存在,所以需要合并数据。
posted @ 2021-01-17 09:01  凯尔哥  阅读(435)  评论(0编辑  收藏  举报