mapreduce job没有正确设置压缩编解码器

时间:2015-06-05 06:15:39

标签: hadoop mapreduce yarn avro snappy

您好我有一个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");

但输出仍然没有压缩的压缩

3 个答案:

答案 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”一词,否则它将与中间输出有关。