一:MapReduce的压缩
hadoop压缩能够减少map阶段从环形缓冲区生成小文件进行压缩,以及reductTask读取map阶段的文件采用压缩,可以有效的节约磁盘空间以及加速数据在网络上的传输。
查看当前安装的hadoop支持的压缩方式:
bin/hadoop checknative
二:设置snappy压缩方式
注意:默认下载的CHD版本的hadoop不支持snappy压缩,需要对hadoop进行本地编译,才能支持snappy压缩。
代码方式采用压缩:
1)在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");
2)在reduce阶段设置压缩:
configuration.set("mapreduce.output.fileoutputformat.compress","true");
configuration.set("mapreduce.output.fileoutputformat.compress.type","RECORD");
configuration.set("mapreduce.output.fileoutputformat.compress.codec","org.apache.hadoop.io.compress.SnappyCodec");
配置文件方式采用snappy压缩:
1)修改mapred-site.xml配置
<!--Map阶段压缩配置-->
<property>
<name>mapreduce.map.output.compress</name>
<value>true</value>
</property>
<property>
<name>mapreduce.map.output.compress.codec</name>
<value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>
<!--Reduct阶段压缩配置-->
<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.SnappyCodec</value>
</property>