在shuffle阶段,可以看到数据通过大量的拷贝,从map阶段输出的数据,都要通过网络拷贝,发送到reduce阶段,这一过程中,涉及到大量的网络IO,如果数据能够进行压缩,那么数据的发送量就会少得多,那么如何配置hadoop的文件压缩呢,以及hadoop当中的文件压缩支持哪些压缩算法呢??接下来一 一细看
MapReduce的执行流程
为什么要配置压缩:
MapReduce
input
mapper
shuffle
partitioner、sort、combiner、【compress】、group
reducer
output
2.0 hadoop当中支持的压缩算法
文件压缩有两大好处,节约磁盘空间,加速数据在网络和磁盘上的传输
前面hadoop的版本经过重新编译之后,可以看到hadoop已经支持所有的压缩格式了,剩下的问题就是该如何选择使用这些压缩格式来对MapReduce程序进行压缩
可以使用bin/hadoop checknative 来查看编译之后的hadoop支持的各种压缩,如果出现openssl为false,那么就在线安装一下依赖包
bin/hadoop checknative
yum install openssl-devel
hadoop支持的压缩算法
各种压缩算法对应使用的java类
常见的压缩速率比较
如何开启压缩:(详细往下翻)
方式一:在Driver驱动代码中进行设置压缩
设置map阶段的压缩
Configuration configuration = new Configuration();
configuration.set(“mapreduce.map.output.compress”,“true”);
configuration.set(“mapreduce.map.output.compress.codec”,“org.apache.hadoop.io.compress.SnappyCodec”);
设置reduce阶段的压缩
configuration.set(“mapreduce.output.fileoutputformat.compress”,“true”)