压缩优点
- 省空间
- 网络传输快
- 降低IO
压缩缺点
- CPU负载增加
- 如果不支持分割,并行度低
常用压缩
名称 | code | 压缩 | 压缩时间 | 解压时间 | 是否支持分割 |
---|---|---|---|---|---|
Snappy | org.apache.hadoop.io.compress.SnappyCodec | 49.96% | 6.41 | 19.84 | 否 |
gzip | org.apache.hadoop.io.compress.GzipCodec | 31.90% | 85.67 | 21.82 | 否 |
lzo | com.hadoop.compression.lzo.LzopCodec/com.hadoop.compression.lzo.LzoCodec | 48.82% | 7.61 | 11.17 | Yes If Index |
lz4 | org.apache.hadoop.io.compress.DefaultCodec | 49.46% | 6.45 | 2.36 | 否 |
bzip2 | org.apache.hadoop.io.compress.BZip2Codec | 27.83% | 142.32 | 62.51 | 是 |
hadoop配置
- 启用native
编译时需要启用native,可使用hadoop checknative命令检查是否启用。 - core-site.xml
<property>
<name>io.compression.codecs</name>
<value>
org.apache.hadoop.io.compress.GzipCodec,
org.apache.hadoop.io.compress.DefaultCodec,
org.apache.hadoop.io.compress.BZip2Codec,
org.apache.hadoop.io.compress.SnappyCodec
</value>
</property>
- mapred-site.xml
这个配置文件中,分为总的输出和中间的输出(map),可根据实际情况配置,需要修改时可自行修改。
<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.BZip2Codec</value>
</property>
<!--启用map中间文件压缩-->
<property>
<name>mapreduce.map.output.compress</name>
<value>true</value>
</property>
<!--启用map中间压缩类-->
<property>
<name>mapred.map.output.compression.codec</name>
<value>com.hadoop.compression.SnappyCodec</value>
</property>
Hive配置
- 命令方式(推荐使用)
SET hive.exec.compress.output=true;
SET mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.BZip2Codec;
--最佳实践
SET hive.exec.compress.output=true;
SET mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.BZip2Codec;
create table page_views_bzip2
ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t"
as select * from page_views;
--最后还原设置
set xxx=yyy
- hive-site.xml
总结
-
输入端
最好使用支持分割的压缩方式,多一个task并行执行。 -
map端
使用解压缩速度快的压缩方式 -
输出端
如果结果不作为下一个作业的输入,使用高压缩的压缩方式 -
其他
时间与CPU负载成反比,压缩越多,集群负载越大。如果集群负载很大了,最好不要使用压缩。