Hadoop I/O: Sequence, Map, Set, Array, BloomMap Files

http://blog.cloudera.com/blog/2011/01/hadoop-io-sequence-map-set-array-bloommap-files/

SequenceFile存储格式如下

hdfs-sequence-file-format.png

内部有三种可选的存储格式:

  1. “Uncompressed” format
  2. “Record Compressed” format
  3. “Block-Compressed” format

然后使用哪种格式以及元信息是在Header里面标记的

hdfs-sequence-file-header.png

其中metadata部分可以存储这个文件的一些元信息,存储格式也非常简单。key和value只是允许Text格式,并且在创建的时候就需要指定

hdfs-sequence-file-metadata.png

至于里面的record/block存储格式如下

hdfs-sequence-file-record.png hdfs-sequence-file-block.png

至于Compress算法,这个在Header里面的Compress Codec Class Name里面就指定了。


Hadoop SequenceFile is the base data structure for the other types of files, like MapFile, SetFile, ArrayFile and BloomMapFile.

hdfs-mapfile-index-data-bloom.png

MapFile是由两个SequenceFile组成,一个是index文件,一个是data文件。data文件里面的key是顺序存储的,index文件是data中key的部分索引. index的key和data的key相同,而value是这个record在data文件中的偏移,至于这个索引间隔可以通过setIndexInterval来设置。操作的时候会将index全部都读取到内存,然后在index里面所二分查找,然后在data文件里面做顺序查找。 #note: 如果data文件要压缩的话,那么这个边界必须和index对应

SetFile是基于MapFile完成的,只不过value = NullWritable

ArrayFile也是基于MapFile完成的,只不过key = LongWriatble,然后每次写入都会+1

BloomMapFile扩展了MapFile添加了一个bloom文件,存储的是DynamicBloomFilter序列化内容。在判断key是否在MapFile之前,先走BloomFilter.

comments powered by Disqus