如何压缩MapReduce的输出?

How to compress the output of MapReducer?

这是我关于 MapReduce 的新问题。

我们知道Map/Reduce输出存储在HDFS本身,所以为了节省磁盘space我们可以压缩最终输出并存储它。

我们是否有任何内置函数或方法来压缩 O/P 并存储在 HDFS 中。

有压缩 mapreduce 输出和中间输出的选项。

假设您需要将最终输出压缩为gzip格式,您可以通过以下任何一种方式提及。

  • 而运行 jar 命令

    hadoop jar <yourjar.jar> \
    -Dmapred.output.compress=true \
    -Dmapred.output.compression.type=BLOCK \
    -Dmapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec \
    -input <input-path> \
    -output $OUTPUT \
    
  • 来自Driverclass

    FileOutputFormat.setOutputCompressorClass(job, org.apache.hadoop.io.compress.GzipCodec.class);
    
  • 通过设置配置参数

    MRv1

    conf.set("mapred.output.compress", "true");
    conf.set("mapred.output.compression.type", "BLOCK");
    conf.set("mapred.output.compression.codec","org.apache.hadoop.io.compress.GzipCodec");
    

    MRv2/YARN

    conf.set("mapreduce.output.fileoutputformat.compress", "true");
    conf.set("mapreduce.output.fileoutputformat.compress.type", "BLOCK");
    conf.set("mapreduce.output.fileoutputformat.compress.codec","org.apache.hadoop.io.compress.GzipCodec");