ØHFile
文件不定长,长度固定的块只有两个:
Trailer
和
FileInfo
。
ØHFile
写到硬盘时,
Trailer
被写到最后。
Trailer
中指针指向其他数据块的起始点。
ØFile Info
中记录了文件的一些
Meta
信息,例如:
AVG_KEY_LEN, AVG_VALUE_LEN, LAST_KEY, COMPARATOR, MAX_SEQ_ID_KEY
等
ØData Index
和
Meta Index
块记录了每个
Data
块和
Meta
块的起始点
ØData Block
是
HBase I/O
的基本单元,为了提高效率,
HRegionServer
中有基于
LRU
的
Block Cache
机制
Ø
每个
Data Block
的大小可以在创建一个
Table
的时候通过参数指定,大号的
Block
有利于顺序
Scan,
小号
Block
利于随机查询
Ø
每个
Data Block
除了开头的
Magic
以外就是一个个
KeyValue
对拼接而成
, Magic
内容就是一些随机数字,目的是防止数据损坏
HFile
里面的每个
KeyValue
对就是一个简单的
byte
数组。这个
byte
数组里面包含了很多项,并且有固定的结构。
ØKeyLength
和
ValueLength:
两个固定的长度,分别代表
Key
和
Value
的长度
ØKey
部分
Row Length
是固定长度的数值,表示
RowKey
的长度,
Row
就是
RowKey
Column Family Length
是固定长度的数值,表示
Family
的长度,
接着就是
Column Family,
再接着是
Qualifier,
然后是两个固定长度的数值,表示
Time Stamp
和
Key Type(Put/Delete)
Value
部分没有这么复杂的结构,就是纯粹的二进制数据
HFile 中的数据块大小默认为 64KB。如果访问 HBase 数据库的场景多为有序的访问,那么建议将该值设置的大一些。如果场景多为随机访问,那么建议将该值设置的小一些。一般情况下,通过调整该值可以提高 HBase 的性能。