天天看点

Hadoop中基于文件的数据格式(1)SequenceFile1 概述2 压缩类型3 特点4 代码

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可以看到。

继续阅读