mapreduce 作业未正确设置压缩编解码器
mapreduce job not setting compression codec correctly
您好,我有一个 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");
但输出仍然没有被快速压缩
如果要使用snappy,只设置参数org.apache.hadoop.io.compress.SnappyCodec
是不够的。您应该从 google 下载 snappy 并构建它们,然后将构建文件复制到 hadoop lib 目录。
你可以在google"how to use snappy on hadoop"上搜索,有一个post,但是是用中文写的。 link
您现在拥有的是映射阶段的中间输出的压缩。相反,您应该使用以下命令(有关详细信息,请参阅 this presentation 尤其是幻灯片 9):
conf.setOutputFormat(SequenceFileOutputFormat.class);
conf.set("mapreduce.output.fileoutputformat.compress.codec", "org.apache.hadoop.io.compress.SnappyCodec");
或您希望的任何替代方案,但不要在这些配置中包含单词 "map",否则它将是关于中间输出。
以下方法成功了
FileOutputFormat.setCompressOutput(job, true);
FileOutputFormat.setOutputCompressorClass(job, org.apache.hadoop.io.compress.SnappyCodec.class);
请注意,这确实在设置输出路径之前完成,并且顺序与上面显示的相同。
您好,我有一个 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");
但输出仍然没有被快速压缩
如果要使用snappy,只设置参数org.apache.hadoop.io.compress.SnappyCodec
是不够的。您应该从 google 下载 snappy 并构建它们,然后将构建文件复制到 hadoop lib 目录。
你可以在google"how to use snappy on hadoop"上搜索,有一个post,但是是用中文写的。 link
您现在拥有的是映射阶段的中间输出的压缩。相反,您应该使用以下命令(有关详细信息,请参阅 this presentation 尤其是幻灯片 9):
conf.setOutputFormat(SequenceFileOutputFormat.class);
conf.set("mapreduce.output.fileoutputformat.compress.codec", "org.apache.hadoop.io.compress.SnappyCodec");
或您希望的任何替代方案,但不要在这些配置中包含单词 "map",否则它将是关于中间输出。
以下方法成功了
FileOutputFormat.setCompressOutput(job, true);
FileOutputFormat.setOutputCompressorClass(job, org.apache.hadoop.io.compress.SnappyCodec.class);
请注意,这确实在设置输出路径之前完成,并且顺序与上面显示的相同。