HBase 读写流程

读流程

在这里插入图片描述

  1. hbase client 访问 zk ,得到 meta 表的数据所在的 region server 。

meta 表结构:
rowkey :【table, regionstart key ,regionid】
info:regioninfo
info:regionserver

  1. 从region server (meta 表的region server)读到元数据并缓存在 client。

这也是为什么 Connection 是重量级开销的原因,元数据可能也有个几M或者几十M。

  1. 从 meta 表 info 列族中获取到具体存储当前要读取表信息的 region server。
  2. 给 region server 发送读取请求。
  3. 首先将该操作记录到 region server 的 WAL 日志。
  4. 读取 block cache ,缓存命中,直接返回,否则继续。
  5. 读取 mem store 内存与 store 文件。

可能存在数据写入但是没有落盘,所以需要读取 mem store。
读取 store HFlie 文件, HFile 文件存储的信息,可以快速判断当前 HFile 文件是否变化,以及布隆过滤器,可以判断要读取的 key 是否存在。

  1. 将读到的数据合并返回 client。

HBase 写入流程

在这里插入图片描述

  1. Client 先访问 zookeeper,获取 hbase:meta 表位于哪个 Region Server。
  2. 访问对应的 Region Server,获取 hbase:meta 表,根据读请求的 namespace:table/rowkey, 查询出目标数据位于哪个 Region Server 中的哪个 Region 中。并将该 table 的 region 信息以 及 meta 表的位置信息缓存在客户端的 meta cache,方便下次访问。
    与目标 Region Server 进行通讯;
  3. 将数据顺序写入(追加)到 WAL;

WAL 日志是记录在 hdfs 上的,一个 region server 公用一个 WAL 文件,并不是一个 region 一个文件。

  1. 将数据写入对应的 MemStore,数据会在 MemStore 进行排序
  2. 向客户端发送 ack
  3. 等达到 MemStore 的刷写时机后,将数据刷写到 HFile。

思考

  • 写入mem store 后什么时候刷盘,刷盘时机(在刷盘的时候,产生小文件会怎么办)
  • hfile 文件的合并与拆分
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值