Mapreduce作业没有正确设置压缩编解码器



嗨,我有一个MR2作业,它将avro数据压缩为snappy作为输入,处理它并将数据输出到avro格式的输出目录中。期望这个输出avro数据也应该被快速压缩,但事实并非如此。MR作业是一个映射作业。

我在我的代码

中设置了以下属性

conf.set("mapreduce.map.output.compress", "true"); conf.set("mapreduce.map.output.compress.codec", "org.apache.hadoop.io.compress.SnappyCodec");

但是输出仍然不是压缩的

下面的方法就成功了 FileOutputFormat.setCompressOutput(job, true); FileOutputFormat.setOutputCompressorClass(job, org.apache.hadoop.io.compress.SnappyCodec.class);

请注意,这必须在设置输出路径之前完成,并且顺序与上面所示的相同。

如果你想使用snappy,仅仅设置参数org.apache.hadoop.io.compress.SnappyCodec是不够的。你应该从google下载snappy并构建它们,然后将构建文件复制到hadoop lib目录。

你可以在谷歌上搜索"如何在hadoop上使用snappy",有一篇文章,但它是用中文写的。链接

您现在拥有的是映射阶段的中间输出的压缩。相反,您应该使用以下命令(有关详细信息,请参阅本演示文稿,尤其是幻灯片9):

conf.setOutputFormat(SequenceFileOutputFormat.class);
conf.set("mapreduce.output.fileoutputformat.compress.codec", "org.apache.hadoop.io.compress.SnappyCodec");

或任何您希望的替代方案,但不要在这些配置中包含单词"map",否则它将是关于中间输出的。

相关内容

  • 没有找到相关文章

最新更新