Hadoop 将gzip用作缩减器会产生损坏的数据

Hadoop 将gzip用作缩减器会产生损坏的数据,hadoop,compression,hadoop-streaming,Hadoop,Compression,Hadoop Streaming,当我像这样运行hadoop流媒体时: hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-streaming.jar -Dmapred.reduce.tasks=16 -input foo -output bar -mapper "python zot.py" -reducer gzip 我在输出目录中得到16个文件,唉,这些文件已损坏: $ h

当我像这样运行hadoop流媒体时:

hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-streaming.jar 
       -Dmapred.reduce.tasks=16
       -input foo
       -output bar
       -mapper "python zot.py"
       -reducer gzip
我在输出目录中得到16个文件,唉,这些文件已损坏:

$ hadoop fs -get bar/part-00012
$ file part-00012
gzip compressed data, from Unix
$ cat part-00012 | gunzip >/dev/null

gzip: stdin: invalid compressed data--format violated
当我目视检查cat part-00012 | gunzip的输出时,我看到一些零件看起来有点正确,然后又完全错误,然后又死亡

  • 为什么文件损坏了
另外,我知道我可以使用gzip将我的数据集拆分为少量压缩文件


PPS。这适用于。

您需要在jobconf设置中直接使用output.compress。不需要通过gzip发送。
注意你的其他问题。

谢谢。然而,为什么我的文件在这里被破坏了?理论上它应该是有效的。它只是通过stdin输入的,gzip处理得很好。您使用的模式在Hadoop世界中有点不正常。我所能想到的是,它没有在reducer终止时正确地关闭gzip归档。如果你的理论是正确的(关于关闭),那么大部分文件都是可以的。事实并非如此。