我像这样运行一个 hadoop 流作业:
hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-streaming.jar
-Dmapred.reduce.tasks=16
-Dmapred.output.compres=true
-Dmapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec
-input foo
-output bar
-mapper "python zot.py"
-reducer /bin/cat
我确实在输出目录中得到了 16 个包含正确数据的文件,但是这些文件没有被压缩:
$ hadoop fs -get bar/part-00012
$ file part-00012
part-00012: ASCII text, with very long lines
- 为什么
part-00012
没有压缩? - 如何将我的数据集拆分为少量(比如 16 个)gzip 压缩文件?
附言。另见“Using gzip as a reducer produces corrupt data”
PPS。这是vw .
PPPS。我想我可以做 hadoop fs -get
, gzip
, hadoop fs -put
, hadoop fs -rm
16次,但这似乎是一种非常非 hadoopic 的方式。
最佳答案
您的 mapred.output.compres 参数中有错字。如果您查看自己的工作经历,我敢打赌它已关闭。
此外,您还可以避免将 reduce-stage 放在一起,因为那只是整理文件。除非您特别需要 16 个零件文件,否则请尝试将其保留为仅贴图。
hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-streaming.jar
-Dmapred.reduce.tasks=0
-Dmapred.output.compress=true
-Dmapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec
-input foo
-output bar
-mapper "python zot.py"
关于尽管 mapred.output.compress=true,hadoop 流仍会生成未压缩的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23767799/