如何压缩MapReduce作业输出

时间:2020-01-09 10:34:33  来源:igfitidea点击:

如果要在Hadoop中压缩MapReduce作业的输出,可以通过在作业配置中设置属性或者在整个集群级别通过在mapred-site.xml中设置属性来按作业完成输出。

压缩MapReduce作业输出的属性

  • mapreduce.output.fileoutputformat.compress-如果应压缩作业输出,则设置为true。默认为false。
  • mapreduce.output.fileoutputformat.compress.type –如果将作业输出压缩为SequenceFiles,应如何压缩?应该是NONE,RECORD或者BLOCK之一。默认值为RECORD。
  • mapreduce.output.fileoutputformat.compress.codec –如果作业输出已压缩,则使用哪个编解码器。默认值为org.apache.hadoop.io.compress.DefaultCodec

在mapred-site.xml中进行更改

如果要为群集上运行的所有作业压缩MapReduce作业输出,则可以在mapred-site.xml中添加这些属性。

<property>
  <name>mapreduce.output.fileoutputformat.compress</name>
  <value>true</value>
</property>
<property>
  <name>mapreduce.output.fileoutputformat.compress.type</name>
  <value>RECORD</value>
</property>
<property>
  <name>mapreduce.output.fileoutputformat.compress.codec</name>
  <value>org.apache.hadoop.io.compress.GzipCodec</value>
</property>

在作业配置中进行更改

如果我们只想为特定的MapReduce作业压缩MapReduce作业的输出,则在作业配置中添加属性。

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

如果我们使用序列文件格式,则也可以设置压缩类型。

SequenceFileOutputFormat.setOutputCompressionType(job, CompressionType.BLOCK);