前言

本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和参考文献请见1000个问题搞定大数据技术体系

正文

请结合我的这篇博客来理解本文:
一篇文章搞懂 HBase 的内部原理

读操作

在这里插入图片描述

  1. 首先从 ZooKeeper 找到 meta 表的 region 位置,然后读取 hbase:meta 表中的数据, hbase:meta 表中存储了用户表的 region 信息
  2. 根据要查询的 namespace 、表名和 rowkey 信息,找到写入数据对应的 Region 信息
  3. 找到这个 Region 对应的 RegionServer ,然后发送请求
  4. 查找对应的 Region
  5. 先从 MemStore 查找数据,如果没有,再从 BlockCache 上读取

HBase 上 RegionServer 的内存分为两个部分一部分作为 MemStore ,主要用来写;。
另外一部分作为 BlockCache ,主要用于读数据;

  1. 如果 BlockCache 中也没有找到,再到 StoreFile(HFile) 上进行读取

从 StoreFile 中读取到数据之后,不是直接把结果数据返回给客户端,而是把数据先写入到 BlockCache 中,目的是为了加快后续的查询;然后在返回结果给客户端。

写操作

在这里插入图片描述

  1. 首先从 ZooKeeper 找到 hbase:meta 表的 Region 位置,然后读取 hbase:meta 表中的数据, hbase:meta 表中存储了用户表的 Region 信息
  2. 根据 namespace 、表名和 rowkey 信息找到写入数据对应的 Region 信息
  3. 找到这个 Region 对应的 RegionServer ,然后发送请求
  4. 把数据分别写到 HLog ( WriteAheadLog )和 MemStore 各一份
  5. MemStore 达到阈值后把数据刷到磁盘,生成 StoreFile 文件
  6. 删除 HLog 中的历史数据。
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐