如果压缩类型是RECORD而不是块,我们是否需要创建索引文件(使用lzop)?

时间:2014-05-09 08:46:55

标签: hadoop hadoop-lzo

据我所知,需要一个索引文件来使输出Splittable。如果mapred.output.compression.type = Sequence File.Compression Type.RECORD,我们还需要创建索引文件吗?

1 个答案:

答案 0 :(得分:2)

简答:

RECORD和BLOCK compression.type属性适用于序列文件,而不适用于简单的文本文件(可以使用lzo或gzip或bz2独立压缩...)

更多信息:

LZO是一种压缩编解码器,它提供比gzip更好的压缩和解压缩速度,以及分割能力。 LZO允许这样做,因为它由许多较小(~256K)的压缩数据块组成,允许作业沿块边界分割,而不是gzip,整个文件的字典写在顶部。

当您将mapred.output.compression.codec指定为LzoCodec时,hadoop将生成 .lzo_deflate 文件。它们包含没有任何标头的原始压缩数据,并且无法使用lzop -d命令解压缩。 Hadoop可以在地图阶段读取这些文件,但这会让你的生活变得艰难。

当您将LzopCodec指定为compression.codec时,hadoop将生成 .lzo 文件。它们包含标题,可以使用lzop -d

进行解压缩

但是,默认情况下,.lzo和.lzo_deflate文件都不可拆分。这就是LzoIndexer发挥作用的地方。它会生成一个索引文件,告诉您记录边界的位置。这样,多个map任务可以处理同一个文件。

有关详细信息,请参阅this cloudera blog postLzoIndexer