原文:http://blog.163.com/liaoxiangui@126/blog/static/79569640201212311415217/
概述
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存储了本文件的相关信息。
图1 hfile格式概要图
1 hfile
图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
图3 data block格式
data block存储真正的表数据。一个文件中的block的大小大致一致,约为blocksize(默认值是65K)。
key的type有如下四种取值:
4 | put |
8 | delete |
12 | delete column |
14 | delete column family |
3 meta block
图4 meta block格式
data是与bloomfilte相关的数据。
4 file info
图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
图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
图7 meta index block格式
可选。每个项目对应一个meta block,项目的各个元素的意义同data index block。
block key的取值可能为:
"BLOOM_FILTER_META" |
"BLOOM_FILTER_DATA" |
7 trailer
图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
支持三种压缩方式
代码 | 压缩算法 |
0 | LZO |
1 | GZIP |
2 | NONE |
version
hfile格式的版本号,目前为1。