概述
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。