【HBase】Apache HBase内核深度剖析( 四 )
本文插图
(HFileBlock结构 , 来自网络)
每一个block块支持两种类型 , 一种是支持Checksum的 , 一种是不支持Checksum的 , 通过参数usesHBaseChecksum在创建block的时候进行设置:
本文插图
HFileBlock主要包含两个部分 , 一个是Header一个是Data , 如下图所示:
本文插图
(HFileBlock结构 , 来自网络)
BlockHeader主要存储block元数据 , BlockData用来存储具体数据 。 前面提到一个大的HFile会被切分成多个小的block , 每一个block的header都相同 , 但是data不相同 , 主要是通过BlockType字段来进行区分 , 也就是HFile把文件按照不同使用类型 , 分成多个小的block文件 , 具体定义在BlockType中 , 定义了支持的Type类型:
本文插图
下面我们仔细分解一下HBase的Data部分的存储 , HBase是一个K-V的数据库 , 并且每条记录都会默认保留 , 通过时间戳进行筛选 , 所以HBase的K-V的格式在磁盘的逻辑架构如下所示:
本文插图
(DataBlock结构 , 来自网络)
每个KeyValue都由4个部分构成 , 而Key又是一个复杂的结构 , 首先是rowkey的长度 , 接着是rowkey , 然后是ColumnFamily的长度 , 再是ColumnFamily , 之后是ColumnQualifier , 最后是时间戳和KeyType(keytype有四种类型 , 分别是Put、Delete、 DeleteColumn和DeleteFamily) , 而value相对简单 , 是一串纯粹的二进制数据 。
最开始的时候我们介绍了布隆过滤器 , 布隆过滤器会根据条件减少和跳过部分文件 , 以增加查询速度:
本文插图
(布隆过滤器 , 来自网络)
每一个HFile有自己的布隆过滤器的数组 , 但是我们也会发现 , 这样的一个数组 , 如果HBase的块数足够多 , 那么这个数组会更加的长 , 也就意味着资源消耗会更多 , 为了解决这个问题 , 在HFile里面又定义了布隆过滤器的块 , 用来检索对应的Key需要使用哪个数组:
本文插图
(布隆过滤器结构 , 来自网络)
一次get请求进来 , 首先会根据key在所有的索引条目中进行二分查找 , 查找到对应的Bloom Index Entry , 就可以定位到该key对应的位数组 , 加载到内存进行过滤判断 。
HBase RegionServer 聊完了HBase的流程和存储格式 , 现在我们来看一下HBase的RegionServer , RegionServer是HBase响应用户读写操作的服务器 , 内部结构如下所示:
推荐阅读
- 安胜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的必需品