压缩
1. 概述
(1)压缩的好处和坏处
压缩的优点:以减少磁盘IO、减少磁盘存储空间。
压缩的缺点:增加CPU开销。
(2)压缩原则
1)运算密集型的Job,少用压缩。
2)IO密集型的Job,多用压缩。
2. MR支持的压缩编码
(1)压缩算法对比介绍
(2)压缩性能的比较
3. 压缩方式选择
压缩方式选择时重点考虑:压缩/解压缩速度、压缩率(压缩后存储大小)、压缩后是否可以支持切片。
(1)Gzip压缩
优点:压缩率比较高;
缺点:不支持Split;压缩/解压速度一般;
(2)Bzip压缩
优点:压缩率高;支持Split;
缺点:压缩/解压速度慢。
(3)Lzo压缩
优点:压缩/解压速度比较快;支持Split;
缺点:压缩率一般;想支持切片需要额外创建索引。
(4)Snappy压缩
优点:压缩和解压缩速度快;
缺点:不支持Split;压缩率一般;
(5)压缩位置选择:压缩可以在MapReduce作用的任意阶段启用。
4. 要在hadoop中启用压缩,可以配置如下参数
5. 压缩实操
(1)map端输出压缩
// 开启map端输出压缩
conf.setBoolean("mapreduce.map.output.compress",true); // 设置map端输出压缩方式 conf.setClass("mapreduce.map.output.compress.codec",BZip2Codec.class,CompressionCodec.class);
之后输出的文件不是压缩包。
(2)reducer端输出压缩
// 设置reduce端输出压缩开启 FileOutputFormat.setCompressOutput(job, true); // 设置压缩的方式 FileOutputFormat.setOutputCompressorClass(job, BZip2Codec.class);