您好我有一个MR2作业,它将使用snappy压缩的avro数据作为输入,处理它并将数据输出到输出目录为avro格式。期望是这个输出avro数据也应该是快速压缩但不是。 MR作业是仅限地图的作业。
我在代码中设置了以下属性
conf.set("mapreduce.map.output.compress", "true");
conf.set("mapreduce.map.output.compress.codec", "org.apache.hadoop.io.compress.SnappyCodec");
但输出仍然没有压缩的压缩
答案 0 :(得分:2)
以下是诀窍
FileOutputFormat.setCompressOutput(job, true);
FileOutputFormat.setOutputCompressorClass(job, org.apache.hadoop.io.compress.SnappyCodec.class);
请注意,在设置输出路径之前,请按照上面显示的顺序完成此操作。
答案 1 :(得分:0)
如果你想使用snappy,只需设置参数org.apache.hadoop.io.compress.SnappyCodec
是不够的。你应该从谷歌下载snappy并构建它们,然后将构建文件复制到hadoop lib目录。
你可以搜索谷歌“如何在hadoop上使用snappy”,有一篇文章,但它是用中文写的。 link
答案 2 :(得分:0)
您现在拥有的是压缩地图阶段的中间输出。相反,您应该使用以下命令(有关详细信息,请参阅this presentation,特别是幻灯片9):
conf.setOutputFormat(SequenceFileOutputFormat.class);
conf.set("mapreduce.output.fileoutputformat.compress.codec", "org.apache.hadoop.io.compress.SnappyCodec");
或您希望的任何替代方案,但在这些配置中不包括“map”一词,否则它将与中间输出有关。