据我所知,需要一个索引文件来使输出Splittable。如果mapred.output.compression.type = Sequence File.Compression Type.RECORD,我们还需要创建索引文件吗?
答案 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 post和LzoIndexer。