在Hadoop程序中,我尝试压缩结果,我编写了以下代码:
FileOutputFormat.setCompressOutput(job, true);
FileOutputFormat.setOutputCompressorClass(job, GzipCodec.class);
结果被压缩,当我删除第一行时:
FileOutputFormat.setCompressOutput(job, true);
再次执行程序,结果相同,是上面的代码
FileOutputFormat.setCompressOutput(job,true);
可选?该代码的功能是什么?
答案 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);
}