继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

HBase HFile

慕村9548890
关注TA
已关注
手记 1102
粉丝 227
获赞 987

本文主要介绍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


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP