1

嗨,我有一个 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");

但是输出仍然没有被快速压缩

4

3 回答 3

2

下面的伎俩 FileOutputFormat.setCompressOutput(job, true); FileOutputFormat.setOutputCompressorClass(job, org.apache.hadoop.io.compress.SnappyCodec.class);

请注意,这在设置输出路径之前已经完成,并且顺序与上图相同。

于 2015-06-19T00:31:48.510 回答
0

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

你可以在谷歌上搜索“如何在hadoop上使用snappy”,有一个帖子,但它是用中文写的。关联

于 2015-06-05T07:11:43.797 回答
0

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

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

或您希望的任何替代方案,但不要在这些配置中包含“地图”一词,否则它将与中间输出有关。

于 2015-06-05T07:31:24.297 回答