1 sequencefile是hadoop为例存储二进制的<k,v>而设计的一种平面文件。
2 sequencefile的key和value是writable或者writable子类。
3 sequencefile的存储不按照key排序,内部类writer提供了append方法。
4 sequencefile作为一个容器,可以将小文件打包到sequencefile,高效对小文件进行存储和处理。
根据compressiontype的不同,有如下压缩类型
none:不压缩。每个记录有key长度、value长度、key、value组成,长度字段分别为4字节。
record: 记录压缩。结构与none非常类似,用定义在头部的编码器压缩value,key不压缩。
block:块压缩。一次压缩多条记录,当记录字节数达到一个阈值则天际到块,io.seqfile.compress.blocksize控制。格式为:记录数,键长度,键,值长度,值。
分别对应writer:
writer : uncompressed records
recordcompresswriter : record-compressed files, only compress values
blockcompresswriter : block-compressed files, both keys & values are collected in 'blocks' separately and compressed. the size of the 'block' is configurable
优点
1 支持基于record和block的压缩
2 支持splittable,能够为mapreduce作为输入分片
3 修改简单,只需要按照业务逻辑修改,不要考虑具体存储格式
缺点
合并后的文件不易查看。hadoop fs -cat看不到,hadoop fs -text可以看到。