HBase中的所有数据文件都存储在Hadoop
HDFS文件系统上,主要包括两种文件类型:
1. HFile, HBase中KeyValue数据的存储格式,HFile是Hadoop的二进制格式文件,实际上StoreFile就是对HFile做了轻量级包装,即StoreFile底层就是HFile
2. HLog File,HBase中WAL(Write Ahead Log)
的存储格式,物理上是Hadoop的Sequence File
下面主要通过代码理解一下HFile的存储格式。
HFile
下图是HFile的存储格式:
HFile由6部分组成的,其中数据KeyValue保存在Block 0
… N中,其他部分的功能有:确定Block Index的起始位置;确定某个key所在的Block位置(如block
index);判断一个key是否在这个HFile中(如Meta Block保存了Bloom Filter信息)。具体代码是在HFile.java中实现的,HFile内容是按照从上到下的顺序写入的(Data
Block、Meta Block、File Info、Data Block Index、Meta Block
Index、Fixed File Trailer)。
KeyValue: HFile里面的每个KeyValue对就是一个简单的byte数组。