7

我使用 LZO 来压缩减少输出。我试过这个:Kevin Weil 的 Hadoop-LZO 项目,然后LzoCodec在我的工作中使用了类:

TextOutputFormat.setOutputCompressorClass(job, LzoCodec.class);

现在压缩工作得很好。

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

这个问题的答案建议使用 Python 解决方案,但是我在 Java 中需要它。
我正在使用 Hadoop 1.1.2 和 Java 6。

4

3 回答 3

7

.lzo_deflate表示没有通常的标头和尾标的 LZO 流。因此,您需要.lzo_deflate使用 lzop 预期的标题和预告片包装原始流。或者至少是标题,然后忽略缺少的预告片中的错误。您需要查看页眉和拖车文档

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

于 2013-05-21T20:48:45.793 回答
4

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

job.getConfiguration().set("mapred.output.compression.codec","com.hadoop.compression.lzo.LzopCodec");
于 2014-10-23T21:18:26.793 回答
0

这个答案帮助我转换.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"
于 2020-05-21T19:08:40.457 回答