【问题标题】:mapreduce job not setting compression codec correctlymapreduce 作业未正确设置压缩编解码器
【发布时间】:2015-06-05 06:15:38
【问题描述】:

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

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

【问题讨论】:

  • 该命令只压缩map阶段的中间输出,不压缩最终输出。
  • 但它只是地图工作

标签: hadoop mapreduce hadoop-yarn avro snappy


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      您现在拥有的是 map 阶段的中间输出的压缩。相反,您应该使用以下命令(请参阅this presentation,尤其是幻灯片 9 了解更多详细信息):

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-07
        • 1970-01-01
        • 2017-04-10
        • 1970-01-01
        • 1970-01-01
        • 2021-11-30
        相关资源
        最近更新 更多