HBase的存储格式是什么?

HBase中的所有数据文件都存储在Hadoop HDFS文件系统上,主要包括上述提出的两种文件类型:

1. HFile, HBaseKeyValue数据的存储格式,HFileHadoop的二进制格式文件,实际上StoreFile就是对HFile做了轻量级包装,即StoreFile底层就是HFile

2. HLog File,HBaseWALWrite Ahead Log) 的存储格式,物理上是HadoopSequence File

HFile

下图是HFile的存储格式:
HBase的存储格式是什么?_第1张图片


首先HFile文件是不定长的,长度固定的只有其中的两块:TrailerFileInfo。正如图中所示的,Trailer中有指针指向其他数据块的起始点。File Info中记录了文件的一些Meta信息,例如:AVG_KEY_LEN, AVG_VALUE_LEN, LAST_KEY, COMPARATOR, MAX_SEQ_ID_KEY等。Data IndexMeta Index块记录了每个Data块和Meta块的起始点。

Data Block是HBase I/O的基本单元,为了提高效率,HRegionServer中有基于LRUBlock Cache机制。每个Data块的大小可以在创建一个Table的时候通过参数指定,大号的Block有利于顺序Scan,小号Block利于随机查询。每个Data块除了开头的Magic以外就是一个个KeyValue对拼接而成, Magic内容就是一些随机数字,目的是防止数据损坏。后面会详细介绍每个KeyValue对的内部构造。

HFile里面的每个KeyValue对就是一个简单的byte数组。但是这个byte数组里面包含了很多项,并且有固定的结构。我们来看看里面的具体结构:

开始是两个固定长度的数值,分别表示Key的长度和Value的长度。紧接着是Key,开始是固定长度的数值,表示RowKey的长度,紧接着是RowKey,然后是固定长度的数值,表示Family的长度,然后是Family,接着是Qualifier,然后是两个固定长度的数值,表示Time StampKey TypePut/Delete)。Value部分没有这么复杂的结构,就是纯粹的二进制数据了。

HLogFile

HBase的存储格式是什么?_第2张图片

上图中示意了HLog文件的结构,其实HLog文件就是一个普通的Hadoop Sequence FileSequence File KeyHLogKey对象,HLogKey中记录了写入数据的归属信息,除了tableregion名字外,同时还包括 sequence numbertimestamptimestamp是“写入时间”,sequence number的起始值为0,或者是最近一次存入文件系统中sequence number

HLog Sequece File的ValueHBaseKeyValue对象,即对应HFile中的KeyValue

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15498/viewspace-1876022/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/15498/viewspace-1876022/

你可能感兴趣的:(HBase的存储格式是什么?)