当前位置: 代码迷 >> 综合 >> Hadoop-优化-数据压缩,压缩方式,压缩参数配置
  详细解决方案

Hadoop-优化-数据压缩,压缩方式,压缩参数配置

热度:25   发布时间:2024-02-02 13:06:07.0

Hadoop数据压缩

文章目录

  • Hadoop数据压缩
    • 1 概述
    • 2 MR支持的压缩编码
    • 3 压缩方式选择
      • 3.1 Gzip压缩
      • 3.2 Bzip2压缩
      • 3.3 Lzo压缩
      • 3.4 Snappy压缩
    • 4 压缩位置选择
    • 5 压缩参数配置

1 概述

在这里插入图片描述
在这里插入图片描述

2 MR支持的压缩编码

压缩格式 hadoop自带? 算法 文件扩展名 是否可切分 换成压缩格式后,原来的程序是否需要修改
DEFLATE 是,直接使用 DEFLATE .deflate 和文本处理一样,不需要修改
Gzip 是,直接使用 DEFLATE .gz 和文本处理一样,不需要修改
bzip2 是,直接使用 bzip2 .bz2 和文本处理一样,不需要修改
LZO 否,需要安装 LZO .lzo 需要建索引,还需要指定输入格式
Snappy 是,直接使用 Snappy .snappy 和文本处理一样,不需要修改

为了支持多种压缩/解压缩算法,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

压缩性能的比较

压缩算法 原始文件大小 压缩文件大小 压缩速度 解压速度
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

3 压缩方式选择

3.1 Gzip压缩

  • 优点:压缩率比较高,而且压缩/解压速度也比较快;Hadoop本身支持,在应用中处理Gzip格式的文件就和直接处理文本一样;大部分Linux系统都自带Gzip命令,使用方便。

  • 缺点:不支持Split。

应用场景:当每个文件压缩之后在130M以内的(1个块大小内),都可以考虑用Gzip压缩格式。例如说一天或者一个小时的日志压缩成一个Gzip文件。

3.2 Bzip2压缩

  • 优点:支持Split;具有很高的压缩率,比Gzip压缩率都高;Hadoop本身自带,使用方便。

  • 缺点:压缩/解压速度慢。

应用场景:适合对速度要求不高,但需要较高的压缩率的时候;或者输出之后的数据比较大,处理之后的数据需要压缩存档减少磁盘空间并且以后数据用得比较少的情况;或者对单个很大的文本文件想压缩减少存储空间,同时又需要支持Split,而且兼容之前的应用程序的情况。

3.3 Lzo压缩

  • 优点:压缩/解压速度也比较快,合理的压缩率;支持Split,是Hadoop中最流行的压缩格式;可以在Linux系统下安装lzop命令,使用方便。

  • 缺点:压缩率比Gzip要低一些;Hadoop本身不支持,需要安装;在应用中对Lzo格式的文件需要做一些特殊处理(为了支持Split需要建索引,还需要指定InputFormat为Lzo格式)。

应用场景:一个很大的文本文件,压缩之后还大于200M以上的可以考虑,而且单个文件越大,Lzo优点越越明显。

3.4 Snappy压缩

  • 优点:高速压缩速度和合理的压缩率。

  • 缺点:不支持Split;压缩率比Gzip要低;Hadoop2版本不支持,需要安装,Hadoop3版本已经自带支持

应用场景:当MapReduce作业的Map输出的数据比较大的时候,作为Map到Reduce的中间数据的压缩格式;或者作为一个MapReduce作业的输出和另外一个MapReduce作业的输入。

4 压缩位置选择

在这里插入图片描述

5 压缩参数配置

要在Hadoop中启用压缩,可以配置如下参数:

参数 阶段 默认值
io.compression.codecs
(在core-site.xml中配置)
输入压缩 无,这个需要在命令行
输入hadoop checknative查看
mapreduce.map.output.compress
(在mapred-site.xml中配置)
mapper输出 false
mapreduce.map.output.compress.codec
(在mapred-site.xml中配置)
mapper输出 org.apache.hadoop.io
.compress.DefaultCodec
mapreduce.output.fileoutputformat.compress
(在mapred-site.xml中配置)
reducer输出 false
mapreduce.output.fileoutputformat.compress.codec
(在mapred-site.xml中配置)
reducer输出 org.apache.hadoop.io
.compress.DefaultCodec
mapreduce.output.fileoutputformat.compress.type
(在mapred-site.xml中配置)
reducer输出 RECORD