是FileOutputFormat.setCompressOutput(job,true);可选的?

时间:2016-05-27 04:39:16

标签: hadoop compression

在Hadoop程序中,我尝试压缩结果,我编写了以下代码:

FileOutputFormat.setCompressOutput(job, true); 
FileOutputFormat.setOutputCompressorClass(job, GzipCodec.class);

结果被压缩,当我删除第一行时:

FileOutputFormat.setCompressOutput(job, true); 

再次执行程序,结果相同,是上面的代码

  

FileOutputFormat.setCompressOutput(job,true);

可选?该代码的功能是什么?

1 个答案:

答案 0 :(得分:2)

请参阅FileOutPutFormat.java中的以下方法,这些方法在内部调用您已删除的方法调用。

  

即setCompressOutput(conf,true);

这意味着您正在尝试应用Gzip编解码器类,然后显然它是一个指向输出应该被压缩的代码的指针。不是吗?

/**
   * Set whether the output of the job is compressed.
   * @param conf the {@link JobConf} to modify
   * @param compress should the output of the job be compressed?
   */
  public static void setCompressOutput(JobConf conf, boolean compress) {
    conf.setBoolean("mapred.output.compress", compress);
  }
  /**
   * Set the {@link CompressionCodec} to be used to compress job outputs.
   * @param conf the {@link JobConf} to modify
   * @param codecClass the {@link CompressionCodec} to be used to
   *                   compress the job outputs
   */
  public static void 
  setOutputCompressorClass(JobConf conf, 
                           Class<? extends CompressionCodec> codecClass) {
    setCompressOutput(conf, true);
    conf.setClass("mapred.output.compression.codec", codecClass, 
                  CompressionCodec.class);
  }