我像这样运行一个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
没有压缩?PS。另请参阅“Using gzip as a reducer produces corrupt data”
PPS。这是vw。
PPPS。我想我可以做hadoop fs -get
,gzip
,hadoop fs -put
,hadoop fs -rm
16次,但这似乎是一种非同寻常的方式。
答案 0 :(得分:1)
mapred.output.compres参数中存在拼写错误。如果你浏览一下你的工作经历,我会打赌它会被关闭。
此外,你可以避免将减少阶段放在一起,因为那只是抓取文件。除非您特别需要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"