0


H(hadoop&code&notebook).数据压缩

一、压缩介绍

1.压缩的好处和坏处

(1)压缩的优点:以减少磁盘IO、减少磁盘存储空间。

(2)压缩的缺点:增加CPU开销。

2.压缩原则

(1)运算密集型的Job,少用压缩。

(2)IO密集型的Job,多用压缩。

3.MR支持的压缩编码

表-1压缩方式表
压缩格式

Hadoop自带?

算法

文件扩展名

是否可切片

换成压缩格式后,原来的程序是否需要修改

DEFLATE

是,直接使用

DEFLATE

.deflate

和文本处理一样,不需要修改

Gzip

是,直接使用

DEFLATE

.gz

和文本处理一样,不需要修改

bzip2

是,直接使用

bzip2

.bz2

和文本处理一样,不需要修改

LZO

否,需要安装

LZO

.lzo

需要建索引,还需要指定输入格式

Snappy

是,直接使用

Snappy

.snappy

和文本处理一样,不需要修改

4.压缩性能比较

表-2性能
压缩算法

原始文件大小

压缩文件大小

压缩速度

解压速度

gzip

8.3GB

1.8GB

17.5MB/s

58MB/s

bzip2

8.3GB

1.1GB

2.4MB/s

9.5MB/s

LZO

8.3GB

2.9GB

49.3MB/s

74.6MB/s
Snappy250MB/s500MB/s

二、压缩算法选择

    压缩方式选择时重点考虑:压缩/解压缩速度、压缩率(压缩后存储大小)、压缩后是否可以支持切片。

1.优缺点介绍

表-3优缺点
压缩算法
优点****缺点
gzip
压缩率比较高不支持Split;压缩/解压速度一般
bzip2
压缩率高;支持Split压缩/解压速度慢
LZO
压缩/解压速度比较快;支持Split压缩率一般;想支持切片,需要额外创建索引Snappy压缩和解压缩速度快不支持Split;压缩率一般

2.使用阶段

    压缩可以在MapReduce作用的任意阶段启用。

输入端采用压缩Mapper输出端采用压缩Reducer输出采用压缩a.数据l量小于块大小,重点考虑压缩和解压缩速度比较快的,MOLZO/Snappy
b.数据量非常大,重点考虑支持切片的Bzip2和LzO。为了减少MapTask和ReduceTask之间的网络
IO,重点考虑压縮和解压缩快的。a.如果数据永久保存,考虑压缩速度比较高的 Bzip2和Gzipo。
b.如果作为下一个MapReduce输入,需要考虑数据量和是否支持切片。

3.压缩参数配置

    为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器。

压缩格式

对应的编码/解码器

DEFLATE

org.apache.hadoop.io.compress.DefaultCodec

gzip

org.apache.hadoop.io.compress.GzipCodec

bzip2

org.apache.hadoop.io.compress.BZip2Codec

LZO

com.hadoop.compression.lzo.LzopCodec

Snappy

org.apache.hadoop.io.compress.SnappyCodec

三、实现过程(Reduce端进行压缩)

1.对于map

    保持不变

2.对于reduce

    保持不变

3.对于driver

    新增如下代码:
        // 设置reduce端输出压缩开启
        FileOutputFormat.setCompressOutput(job, true);

        // 设置压缩的方式
        FileOutputFormat.setOutputCompressorClass(job, BZip2Codec.class);

4.实现效果

参考尚硅谷大数据教程!


本文转载自: https://blog.csdn.net/wq45255446/article/details/126212482
版权归原作者 蒸气awa 所有, 如有侵权,请联系我们删除。

“H(hadoop&code&notebook).数据压缩”的评论:

还没有评论