1. 压缩的好处和坏处

好处

  • 减少存储磁盘空间
  • 降低IO(网络的IO和磁盘的IO)
  • 加快数据在磁盘和网络中的传输速度,从而提高系统的处理速度

坏处

  • 由于使用数据时,需要先将数据解压,加重CPU负荷

2. 常见压缩格式分析

压缩格式
1.20 大数据常见压缩格式以及性能对比 - 图1
压缩比
1.20 大数据常见压缩格式以及性能对比 - 图2压缩时间
1.20 大数据常见压缩格式以及性能对比 - 图3
a. gzip

  1. 优点:
  2. 压缩比在四种压缩方式中较高;hadoop本身支持,在应用中处理gzip格式的文件就和直接处理文本一样;有hadoop native库;大部分linux系统都自带gzip命令,使用方便
  3. 缺点:
  4. 不支持split

b. lzo

  1. 优点:
  2. 压缩/解压速度也比较快,合理的压缩率;支持split,是hadoop中最流行的压缩格式;支持hadoop native库;需要在linux系统下自行安装lzop命令,使用方便
  3. 缺点:
  4. 压缩率比gzip要低;hadoop本身不支持,需要安装;lzo虽然支持split,但需要对lzo文件建索引,否则hadoop也是会把lzo文件看成一个普通文件(为了支持split需要建索引,需要指定inputformatlzo格式)

c. snappy

  1. 优点:
  2. 压缩速度快;支持hadoop native
  3. 缺点:
  4. 不支持split;压缩比低;hadoop本身不支持,需要安装;linux系统下没有对应的命令d.

d.bzip2

  1. 优点:
  2. 支持split;具有很高的压缩率,比gzip压缩率都高;hadoop本身支持,但不支持native;在linux系统下自带bzip2命令,使用方便
  3. 缺点:
  4. 压缩/解压速度慢;不支持native

总结:

  • 不同的场景选择不同的压缩方式,肯定没有一个一劳永逸的方法,如果选择高压缩比,那么对于cpu的性能要求要高,同时压缩、解压时间耗费也多;选择压缩比低的,对于磁盘io、网络io的时间要多,空间占据要多;对于支持分割的,可以实现并行处理。
  • 生产中,Map阶段数据落盘通常使用snappy压缩格式(快速压缩解压),reduce阶段数据落盘通常使用gzip或bzip2进行压缩(减少磁盘使用)。
  • 若该压缩格式不支持文件分割,则后续无法实现并行处理,生产优化核心是让每个文件大小略微低于块大小,如块128M怎文文件为125M。未压缩的文件是支持文件分割的
  • 支持native表示,hadoop自己提供了功能的实现,而不是依赖外部,如bzip2是不支持native,则表示不熟的物理机要另行安装支持bzip2压缩的软件。