mapreduce作业未正确设置压缩编解码器

oxalkeyp  于 2021-06-02  发布在  Hadoop
关注(0)|答案(3)|浏览(423)

嗨,我有一个mr2的工作,它采取了与snappy压缩的avro数据作为输入,处理它,并输出到一个avro格式的输出目录的数据。我们的期望是,这个输出avro数据也应该被快速压缩,但它不是。mr作业是一个仅Map的作业。
我在代码中设置了以下属性 conf.set("mapreduce.map.output.compress", "true"); conf.set("mapreduce.map.output.compress.codec", "org.apache.hadoop.io.compress.SnappyCodec"); 但输出仍然没有迅速压缩

yftpprvb

yftpprvb1#

如果您想使用snappy,只需设置参数 org.apache.hadoop.io.compress.SnappyCodec 这还不够。您应该从google下载snappy并构建它们,然后将构建文件复制到hadoop lib目录。
你可以在google上搜索“如何在hadoop上使用snappy”,有一个帖子,但是是用中文写的。链接

anhgbhbe

anhgbhbe2#

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

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

或者您希望的任何替代方案,但不要在这些配置中包含“map”一词,否则将涉及中间输出。

toiithl6

toiithl63#

下面的人成功了 FileOutputFormat.setCompressOutput(job, true); FileOutputFormat.setOutputCompressorClass(job, org.apache.hadoop.io.compress.SnappyCodec.class); 请注意,在设置outputpath之前,必须按照如上所示的相同顺序完成此操作。

相关问题