HBase数据文件格式解析 (2012/4/26)

概述

hfile是hbase中存储数据的文件,图1描述了hfile文件格式。hfile文件由6部分组成:data block,meta block(可选),file info,data block index,meta block index,trailer。data block存储了表数据,meta block存储了布隆过滤器索引数据,file info存储了本文件的相关信息,index存储了datablock和metablock的索引数据,trailer存储了本文件的相关信息。

HBase数据文件格式解析 (2012/4/26)

图1 hfile格式概要图

   

1 hfile

HBase数据文件格式解析 (2012/4/26)

图2 hfile 格式

如图2,括号中的符号采用了正则表达式的方法,+表示大于等于1个,*表示大于等于0个,(0,1)表示要么是0个要么是1个。如图所示,hfile包含至少一个datablock,0个到多个 metablock,1个fileinfo,0个或1个meta block index,1个trailer。

2 data block

HBase数据文件格式解析 (2012/4/26)

图3 data block格式

data block存储真正的表数据。一个文件中的block的大小大致一致,约为blocksize(默认值是65K)。

key的type有如下四种取值:

put

delete

12 

delete column

14 

delete column family

3 meta block

HBase数据文件格式解析 (2012/4/26)

图4 meta block格式

data是与bloomfilte相关的数据。

4 file info

HBase数据文件格式解析 (2012/4/26)

图5 file info格式

如图5所示,fileinfo存储了4个项目。

AVG_KEY_LEN

是datablock中的key的平均长度;

AVG_VALUE_LEN

是本文件中的data block的value的平均长度;

COMPARATOR

决定了key/value在data block中的排序,有3种COMPARATOR:

KeyComparator

用户数据的比较器

MetaKeyComparator

元数据的比较器

RootKeyComparator

Root元数据的比较器

LASTKEY

可选。最后一个data block中的最后一个key

   

5 data index

HBase数据文件格式解析 (2012/4/26)

图6 data index block格式

每个项目对应一个data block,项目包括如下各个元素:

block offset

    对应的data block在文件中的偏移

block size

    对应的data block的大小

block key len

    block key的长度

block key

    块中的第一个key

   

6 meta index

HBase数据文件格式解析 (2012/4/26)

图7 meta index block格式

可选。每个项目对应一个meta block,项目的各个元素的意义同data index block。

block key的取值可能为:

"BLOOM_FILTER_META"

"BLOOM_FILTER_DATA"

   

7 trailer

HBase数据文件格式解析 (2012/4/26)

HBase数据文件格式解析 (2012/4/26)

图8 trailer格式

fileinfooffset

    fileoinfo在文件中的偏移

dataIndexOffset

    data index在文件中的偏移

dataIndexCount

        即data block的数量,也是dataIndex的项目的数量。因为dataIndex中的项目与datablock一一对应。

metaIndexOffset

metaIndex在文件中的偏移

metaIndexCount

        metaIndex中项目的数量,也是meta block的数量。

totalUncompressedBytes

        所有datablock中数据未压缩之前的总大小

entryCount

        所有datablock中key/value的总数量。

compresssionCodec

支持三种压缩方式

代码

压缩算法

LZO 

GZIP 

NONE 

   

version

    hfile格式的版本号,目前为1。