一、优缺点
优点: 1,减少存储磁盘空间,降低单节点的磁盘IO。
2,由于压缩后的数据占用的带宽更少,因此可以加快数据在Hadoop集群流动的速度。例如在不同节点创建3个replica的阶段,或是shuffle阶段。
缺点: 需要花费额外的时间/CPU做压缩和解压缩计算
二、几种常见的压缩对比
三、压缩分析
首先说明mapreduce哪些过程可以设置压缩:需要分析处理的数据在进入map前可以压缩,然后解压处理,map处理完成后的输出可以压缩,这样可以减少网络I/O(reduce通常和map不在同一节点上),reduce拷贝压缩的数据后进行解压,处理完成后可以压缩存储在hdfs上,以减少磁盘占用量。
3.1设置启用压缩:
有两种方式可以设置数据压缩:
方法一:在.sql脚本设置如下参数
set hive.exec.compress.intermediate=true --启用中间数据压缩 SET hive.exec.compress.output=true; -- 启用最终数据输出压缩 set mapreduce.output.fileoutputformat.compress=true; --启用reduce输出压缩 set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.SnappyCodec --设置reduce输出压缩格式 set mapreduce.map.output.compress=true; --启用map输入压缩 set mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;-- 设置map输出压缩格式
方法二:通过设置hive-site.xml文件设置启用中间数据压缩,配置文件如下:
<property> <name>hive.exec.compress.intermediate</name> <value>true</value> </property> <property> <name>hive.exec.compress.output</name> <value>true</value> </property> <!-- 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> <!-- reduce输出压缩 --> <property> <name>mapreduce.output.fileoutputformat.compress</name> <value>true</value> </property> <property> <name>mapreduce.output.fileoutputformat.compress.codec</name> <value>org.apache.hadoop.io.compress.SnappyCodec</value> </property>