Java 如何解压缩lzo_deflate文件?

Java 如何解压缩lzo_deflate文件?,java,unix,hadoop,compression,lzo,Java,Unix,Hadoop,Compression,Lzo,我使用LZO压缩并减少输出。我尝试了这个:然后在我的工作中使用了LzoCodec类: TextOutputFormat.setOutputCompressorClass(job, LzoCodec.class); 现在压缩工作正常。 我的问题是压缩结果是一个.lzo_deflate文件,我就是无法解压缩 似乎不支持该类型的文件。 LzopCodec应该提供一个.lzo文件,但它不起作用,但是它与LzoCodec(org.apache.hadoop.io.compress)在同一个包中,这可能涉

我使用LZO压缩并减少输出。我尝试了这个:然后在我的工作中使用了
LzoCodec
类:

TextOutputFormat.setOutputCompressorClass(job, LzoCodec.class);
现在压缩工作正常。

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

对此的回答建议使用Python解决方案,但我需要Java版本的解决方案。

我使用的是Hadoop 1.1.2和Java 6。

。lzo_deflate
表示没有通常的头和尾的lzo流。因此,您需要将原始
.lzo_deflate
流与lzop所期望的标题和尾部一起包装。或者至少是标题,然后忽略缺少的尾部的错误。你需要看一下地图


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

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

job.getConfiguration().set("mapred.output.compression.codec","com.hadoop.compression.lzo.LzopCodec");
这帮助我将
.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"
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.gzip代码\
-输入\
-输出$输出\
-映射器“/bin/cat”

LzopCodec的“它不工作”是什么意思?LzopCodec建议优于LzopCodec,它应该可以工作。您可以使用它包含错误吗?可以。
线程“main”java.lang.NoClassDefFoundError中的异常:org/apache/hadoop/io/compress/LzopCodec
。我试图解决这个问题,直到我在某个地方读到LzoCodec更受推荐。这一点以前应该很清楚。最大的区别是Lzop添加了头文件,而Lzo没有。您是否已更新hadoop-env.sh并正确设置hadoop_类路径和JAVA_库路径?是的。我还注释掉了
/PATH/to/hadoop/bin/hadoop
文件中的
JAVA\u库\u PATH='
。我使用
/path/to/hadoop/bin/hadoop classpath
命令检查了lzop库,lzop库是最后一个。它应该像LzoCodec一样工作。你知道@charlesmengay吗?我也试着通过命令行执行两个导出(
export HADOOP\u CLASSPATH=
export JAVA\u LIBRARY\u PATH=
),但同样的事情。谢谢@Mark Adler的回答。我现在明白了。我们不能用“lzop”工具通过命令行解压它吗?我得到了一个类似“不是lzop文件”的错误。