MapReduce中的压缩

压缩


Hadoop权威指南5.2 P99

Mapper输入压缩

在有大量数据并反复处理的情况下,应考虑对输入进行压缩,然而你无需指定使用的译码方式,Hadoop会自动检测文件的扩展名,如果扩展名能够匹配,就会调用恰当的译码方式对文件进行压缩和解压。否则Hadoop不会使用任何译码器,抛异常

此阶段默认支持的格式有

org.apache.hadoop.io.compress.DefaultCodec

org.apache.hadoop.io.compress.GzipCodec

org.apache.hadoop.io.compress.Bzip2Codec

默认支持可以通过配置core-site.xml 的io.compression.codecs进行追加配置

Mapper输出压缩

当Map任务输出的中间数据流很大时,应考虑使用压缩技术,这能显著提升MR任务中的shuffle过程。shuffle 过程是整个hadoop处理过程中消耗资源最多的环节。如果发现因数据量大造成的网络传输慢,也应考虑压缩技术。

可用于Mapper输出的快速译码器包括LZO或者Snappy

此阶段压缩默认未开启,通过设置mapreduce.map.output.compress为true来开启Mapper 输出压缩

开启:

集群中:mapred-site.xml 将mapreduce.map.output.compress的false改为true

JAVA中:configuration.setBoolean(“mapreduce.map.output.compress”,
true)

压缩格式

集群中:修改mapred-site.xml 中的

mapreduce.map.output.compress.codec项

org.apache.hadoop.io.compress.压缩格式

JAVA:

Configuration.setClass(“mapreduce.map.output.compress.codec”,压缩格式 , CompressionCodec.class);

Reducer输出压缩

起到节省磁盘空间的作用。

集群:

开启

修改mapred-site.xml中的

mapreduce.output.fileoutputformat.compress

改为true开启输出压缩

压缩格式

修改mapred-site.xml中的

mapreduce.output.fileoutputformat.compress.codec

org.apache.hadoop.io.compress.压缩格式,默认值DefultCodec

JAVA:
开启:FileOutputFormat.setCompressOutput(job,true);
压缩格式:FileOutputFormat.setOutputCompressorClass(job, GzipCodec.class);

各压缩格式的支持

MapReduce中的压缩

压缩效率

MapReduce中的压缩