概述
如下图,HFile的组成分成四部分,分别是Scanned Block(数据block)、Non-Scanned block(元数据block)、Load-on-open(在hbase运行时,HFile需要加载到内存中的索引、bloom filter和文件信息)以及trailer(文件尾)。
Scannedblock section
1、DataBlock:DataBlock是用于存储具体kv数据的block,在DataBlock中,KeyValue的分布如下图
2、Leaf index block:每次Flush一个DataBlock会在该Block上添加一条记录,并判断该Block的大小是否超过阈值(默认128KB),超出阈值的情况下,会在DataBlock之后写入一个Leafindexblock。对应的控制类:HFileBlockIndex,内置了BlockIndexChunk、BlockIndexReader和BlockIndexWriter(实现了InlineBlockWriter接口)
Load onopen section
1、Root 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
2、Fieldsfor midkey:Region在执行Split操作,默认选择Region当中最大Store下的最大Storefile文件中的midkey,而midkey其实只是在通过HFile获取了这个文件之前记录好的数据。在自动触发Split操作的前提下,大部分的Split操作都伴随在Compaction操作之后进行的原因,在于可以对于Region中的文件进行合并,生成较大的StoreFile文件,以方便选择更好的SplitPoint。
3、FileInfo:FileInfo中保存一些HFile的基本信息,并以PB格式写入到磁盘中。在0.96中是以PB格式进行保存。
Trailer
最后
以上就是健康蛋挞为你收集整理的HFile的全部内容,希望文章能够帮你解决HFile所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复