在hbase 0.92版本中,为了改进在大数据存储下的效率,HFile做了改变。HFile V1的主要问题是,你需要加载(load)所有的单片索引和BloomFilter到内存中,这会导致每台服务器有数GB的内存被块索引消耗掉,这对域服务器的可扩展性和性能有显著的负面影响。此外,由于直到加载完所有块索引数据之后,才能认为域启动完成,因此这样的块索引大小会明显地拖慢域的启动速度。 为了解决这个问题,v2引入了多级索引[一个根索引块和多个叶块,只有根索引(索引数据块)必须一直保存在内存中,叶索引以块的级别存储,这意味着它是否在内存中出现取决于块是否在内存中出现。叶索引仅在加载块时被加载到内存中,并且在块移出时被移出内存。此外,叶级别索引的结构化方式允许在不进行反序列化的情况下,对键进行二叉搜索]和分块BloomFilter。HFile v2改进了速度,内存和缓存利用率。
HFile V2的文件存储格式如下图:
HFile的组成分成四部分,分别是Scanned Block(数据block)、Non-Scanned block(元数据block)、Load-on-open(在hbase运行时,HFile需要加载到内存中的索引、bloom filter和文件信息)以及trailer(文件尾)
在HFile V2中根据