如何解压缩lzo_deflate文件?

时间:2013-05-21 18:28:00

标签: java unix hadoop compression lzo

我使用LZO来压缩减少输出。我尝试了这个:Hadoop-LZO project of Kevin Weil,然后将LzoCodec课程用于我的工作:

TextOutputFormat.setOutputCompressorClass(job, LzoCodec.class);

现在压缩工作正常。

我的问题是压缩结果是.lzo_deflate文件,我无法解压缩。
Lzop utility似乎不支持该类型的文件 LzopCodec应该提供一个.lzo文件,但它不起作用,但是它与LzoCodecorg.apache.hadoop.io.compress)在同一个包中,这可能是指兼容性问题,因为我使用旧的API(0.19)来进行压缩工作。

这个question的答案提出了Python解决方案,但我需要用Java 我正在使用Hadoop 1.1.2和Java 6.

3 个答案:

答案 0 :(得分:7)

.lzo_deflate表示没有通常的标题和预告片的LZO流。因此,您需要使用lzop期望的标头和预告片包装原始.lzo_deflate流。或者至少是标题,然后忽略丢失的预告片中的错误。您需要查看header and trailer documentation

名称中的“deflate”是一个奇怪的选择,但它指的是gzip类比,其中没有gzip头和预告片的原始压缩数据格式称为deflate。

答案 1 :(得分:4)

我遇到了同样的问题。它发生的原因是因为我没有使用正确的编解码器。请在作业配置中检查您的编解码器。

job.getConfiguration().set("mapred.output.compression.codec","com.hadoop.compression.lzo.LzopCodec");

答案 2 :(得分:0)

answer帮助我从.lzo_deflate转换为所需的输出格式:

hadoop jar $HADOOP_HOME/contrib/streaming/hadoop-streaming-0.20.2-cdh3u2.jar \
  -Dmapred.output.compress=true \
  -Dmapred.compress.map.output=true \
  -Dmapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec \
  -input <input-path> \
  -output $OUTPUT \
  -mapper "/bin/cat"