我是靠谱客的博主 健康蛋挞,最近开发中收集的这篇文章主要介绍HFile,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

如下图,HFile的组成分成四部分,分别是Scanned Block(数据block)、Non-Scanned block(元数据block)、Load-on-open(在hbase运行时,HFile需要加载到内存中的索引、bloom filter和文件信息)以及trailer(文件尾)。


 

 clip_image002

 

 

Scannedblock section

1DataBlock:DataBlock是用于存储具体kv数据的block,在DataBlock中,KeyValue的分布如下图


2Leaf index block:每次Flush一个DataBlock会在该Block上添加一条记录,并判断该Block的大小是否超过阈值(默认128KB),超出阈值的情况下,会在DataBlock之后写入一个Leafindexblock。对应的控制类:HFileBlockIndex,内置了BlockIndexChunk、BlockIndexReader和BlockIndexWriter(实现了InlineBlockWriter接口)

 

Load onopen section

1Root Data Index为DataBlockIndex建立多层索引。DataBlockIndex分为Leaf Index Block、Root DataIndex(或者multi Root Data index(紫色的Meta Index区域)),Leaf indexblock具体存储了DataBlock的offset、length、以及firstkey的信息。RootDataIndex 存储的是每个Leaf indexblock的offset、length、Leaf index Block记录的第一个key,以及截至到该Leaf IndexBlock记录的DataBlock的个数。假定DataBlock的个数足够多,HFile文件又足够大的情况下,默认的128KB的长度的ROOTDataIndex仍然存在超过chunk大小的情况时,会分成更多的层次。这样最终的可能是ROOTINDEX –> IntermediateLevel ROOT INDEX(可以是多层) —〉Leaf index block

2Fieldsfor midkey:Region在执行Split操作,默认选择Region当中最大Store下的最大Storefile文件中的midkey,而midkey其实只是在通过HFile获取了这个文件之前记录好的数据。在自动触发Split操作的前提下,大部分的Split操作都伴随在Compaction操作之后进行的原因,在于可以对于Region中的文件进行合并,生成较大的StoreFile文件,以方便选择更好的SplitPoint。

3FileInfo:FileInfo中保存一些HFile的基本信息,并以PB格式写入到磁盘中。在0.96中是以PB格式进行保存。

 

Trailer

最后

以上就是健康蛋挞为你收集整理的HFile的全部内容,希望文章能够帮你解决HFile所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部