我使用LZO来压缩减少输出。我尝试了这个:Hadoop-LZO project of Kevin Weil,然后将LzoCodec
课程用于我的工作:
TextOutputFormat.setOutputCompressorClass(job, LzoCodec.class);
现在压缩工作正常。
我的问题是压缩结果是.lzo_deflate
文件,我无法解压缩。
Lzop utility似乎不支持该类型的文件
LzopCodec
应该提供一个.lzo
文件,但它不起作用,但是它与LzoCodec
(org.apache.hadoop.io.compress
)在同一个包中,这可能是指兼容性问题,因为我使用旧的API(0.19)来进行压缩工作。
这个question的答案提出了Python解决方案,但我需要用Java 我正在使用Hadoop 1.1.2和Java 6.
答案 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"