【HBase】Apache HBase内核深度剖析( 三 )
那么在RegionServer的写入阶段会发生什么呢?首先我们知道 , HBase是具有锁的能力的 , 也就是行锁能力 , 对于HBase来讲 , HBase使用行锁保障对同一行的数据的更新要么都成功要么都失败 , 所以在RegionServer阶段 , 会经过以下步骤:
- 申请行锁 , 用来保障本次写入的事务性
- 更新LATEST_TIMESTAMP字段 , HBase默认会保留历史的所有版本 , 但是查询过滤的时候始终只显示最新的数据 , 然后进行写入前提条件的检查:
本文插图
以上相关操作的代码都在HRegion , RegionAsTable中 , 可以以此作为入口去查看 , 所以这里就不贴大部分的代码了 。
- 写入WAL日志文件 , 在WALProvider中定义了两个方法:
本文插图
append用来对每一次的写入操作进行日志追踪 , 因为有事物机制 , 所以HBase会将一次操作中的所有的key value变成一条日志信息写入日志文件 , aync用来同步将该日志文件落盘到HDFS的文件系统 , 入场中间发生失败 , 则立即回滚 。 4. 写入Memstore , 释放锁 , 本次写入成功 。
所以可以看到对于HBase来讲写入通过日志文件再加Memstore进行配合 , 最后HBase自身再通过对数据落盘 , 通过这样一系列的机制来保障了写入的一套动作 。
讲完了HBase的写入操作 , 再来看看HBase的读取流程 。
对于读来讲 , 客户端的流程和写一样 , HBase的数据不会经过Master进行转发 , 客户端通过Master查找到元信息 , 再根据元信息拿到meta表 , 找到对应的Region Sever直接取数据 。 对于读操作来讲 , HBase内部归纳下来有两种操作 , 一种是GET , 一种是SCAN 。 GET为根据rowkey直接获取一条记录 , 而SCAN则是根据某个条件进行扫描 , 然后返回多条数据的过程 。 可以看到GET经过一系列的判断 , 例如检查是否有coprocessor hook后 , 直接返回了存储数据集的List:
【【HBase】Apache HBase内核深度剖析】
本文插图
那么我们再看SCAN就不那么一样了 , 可以看到 , 对于SCAN的操作来讲并不是一次的返回所有数据 , 而是返回了一个Scanner , 也就是说在HBase里面 , 对于Scan操作 , 将其分成了多个RPC操作 , 类似于数据的ResultSet , 通过next来获取下一行数据 。
本文插图
HBase文件格式前面讲了HBase的操作流程 , 现在我们看下HBase的存储机制 , 首先HBase使用的HDFS存储 , 也就是在文件系统方面没有自身的文件管理系统 , 所以HBase仅仅需要设计的是文件格式 , 在HBase里面 , 最终的数据都是存储在HFile里面 , HFile的实现借鉴了BigTable的SSTable和Hadoop的TFile , 一张图先展示HFile的逻辑结构:
本文插图
(HFile文件格式-图来自网络)
可以看到HFie主要由四个部分构成:
- Scanned block section:顾名思义 , 表示顺序扫描HFile时所有的数据块将会被读取 , 包括Leaf Index Block和Bloom Block 。
- Non-scanned block section:表示在HFile顺序扫描的时候数据不会被读取 , 主要包括Meta Block和* Intermediate Level Data Index Blocks两部分 。
- Load-on-open-section:这部分数据在HBase的region server启动时 , 需要加载到内存中 。 包括FileInfo、Bloom filter block、data block index和meta block index 。
推荐阅读
- 安胜ANSCEN:【E周道】SCUF Gaming泄露110万用户信息 Linux内核漏洞曝光
- 『香港新天域互联』LG G7 ThinQ Android 10内核源代码公布
- 『电子工程世界』技术文章—Arm内核解析
- ■现代ApacheNiFi负载平衡,你了解多少?
- 「UC浏览器」基于chrome内核的微软手机浏览器来了
- [优麒麟]优麒麟20.04 LTS Beta发布 更新Linux 5.4版内核
- 『』华为P40 Pro包装盒曝光,HMS内核已预装,艰难前行为鸿蒙铺路
- 【】AMD 7nm锐龙APU内核玉照首次公开!CPU八核心、GPU八核心
- []新版Windows 10自带Linux内核:可Update更新 像安装驱动一样方便
- 『』三星开源Galaxy S20系列内核源代码:定制ROM的必需品