为了账号安全,请及时绑定邮箱和手机立即绑定

HBase HFile

标签:
Hbase

本文主要介绍Hbase中HFile的结构,说明下结构中各区域的作用

1.HFile文件结构

webp

image

每个region对应一个rowKey范围,每个HFile对应一个ColumnFamily。逻辑上,该文件包含四块区域:

Tailer:文件尾,主要记录version版本,不同的版本Trailer的字段不一样,以及一些偏移信息,后面详细描述;

Load-on-open-section:这部分数据在RegionServer启动时,实例化Region时将所有的StoreFile的Load-on-open-section加载进内存,主要存放了Root Data Index、Meta Index、FileInfo及Bloom Filter的metadata等。除Fields for MidKey,其他每部分都是HFileBlock,后面会详细讲这块。

Non-Scanned Block Section:BloomFilter的元数据信息(MetaBlock)以及Data Block的第二层索引。

Scanned block section:存储实际block数据部分。

2 HFile Block

HFile枚举类BlockType声明了十几种Block类型:

webp

image

HFileBlock主要分为2部分:Block Header和Block Data。其中,Block Header用来存储元数据,包括block类型,压缩block大小,上一个block的偏移量等;而Block Data主要存储具体的数据。下图所示两个版本的HFileBlock均支持读取,但写入时仅支持version 2,后续v1将弃用。

webp

image

3 Trailer Block

主要记录了HFile的基本信息、各个部分的偏移值和寻址信息,字段信息如下表所示。

webp

image

HFile在读取的时候首先会解析Trailer Block并加载到内存,然后再进一步加载LoadOnOpen区的数据。

4 Index Block

HFile V2版本Index Block有两类:Root Index BlockNonRoot Index Block,其中NonRoot Index Block又分为Intermediate Index BlockLeaf Index Block两种。HFile中索引结构类似于一棵树,Root Index Block表示索引数根节点,Intermediate Index Block表示中间节点,Leaf Index block表示叶子节点,叶子节点直接指向实际数据块。

对于Data Block,由于HFile刚开始数据量较小,索引采用single-level结构,只有Root Index一层索引,直接指向数据块。当数据量慢慢变大,Root Index Block满了之后,索引就会变为mutil-level结构,由一层索引变为两层,根节点指向叶子节点,叶子节点指向实际数据块。如果数据量再变大,索引层级就会变为三层。

对于Root Index Block,其结构如下

webp

image

其中Index Entry表示具体的索引对象,每个索引对象由3个字段组成,Block Offset表示索引指向HFile中数据块的偏移量,BlockDataSize表示索引指向数据块在磁盘上的大小,BlockKey表示索引指向数据块中的第一个key。除此之外,还有另外3个字段用来记录MidKey的相关信息,MidKey表示HFile所有Data Block中中间的一个Data Block,用于在对HFile进行split操作时,快速定位HFile的中间位置。



作者:薛定谔的猫Plus
链接:https://www.jianshu.com/p/20206027b53e


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消