Hadoop数据压缩

目录

前言:

一  压缩的原则与优劣

二  MapReduce支持的压缩编码

三   压缩方式选择

四  压缩参数配置与集群设置

五   压缩案例

前言:

大数据时代下,数据量的存储量大大增加。应运而生的大数据平台也不断出现。数据的传递在平台中的效率与内存占用也逐渐成为一个平台是否合格的评断标准。本文将阐述hadoop数据压缩的不同方式与各方式的使用环境。

一  压缩的原则与优劣

(1)压缩原则

由于hadoop中数据的处理需要从客户端传递至map,再由map端传递至reduce进行处理。因此数据在传递过程中的量级大小会直接影响到传递速率与整个工作处理效率。因此,我们认为数据压缩的原则为:运算密集型的job,应当少用压缩算法。IO密集型的job,应当多使用压缩算法。

(2)压缩的优点与缺点

压缩的优点:首先压缩能够减小传递文件的大小,所以压缩能够减少磁盘的IO,同时也能减少磁盘存储空间。

压缩的缺点:应为压缩需要占用CPU来开启压缩算法。所以压缩的缺点为增大了CPU的开销。

二  MapReduce支持的压缩编码

(1)压缩算法介绍

压缩算法介绍

压缩格式

是否为Hadoop自带所支持的算法文件扩展名是否可以进行切片换成压缩格式后,是否需要进行其他修改
DEFLATEDEFLATE.deflate不需要进行修改
GzipDEFLATE.gz不需要进行修改
bzip2bzip2.bz2不需要进行修改
LZO否,需要自行安装LZO.lzo需要建立索引,且需要指定输入格式
SnappySnappy.snappy不需要进行修改

(2)各压缩算法性能比较

性能
压缩算法原始文件大小压缩文件大小压缩速度解压速度
gzip8.3GB1.8GB17.5MB/S58MB/S
bzip28.3GB1.1GB2.4MB/S9.5MB/S
LZO8.3GB2.9GB49.3MB/S74.6MB/S
Snappy8.3GB2.7GB250MB/S250MB/S

三   压缩方式选择

        我们在选择压缩方式时要考虑多个方面:压缩/解压速度、压缩率(压缩后存储大小)、压缩后是否可以切片等。

(1)各压缩方式的优缺点

压缩的优缺点
压缩方式优点缺点
Gzip压缩压缩率比较高

不支持切片;

压缩/解压速度一般;

Bzip2压缩

压缩率高;

支持切片;

压缩/解压速度慢;
Lzo压缩

压缩/解压速度快;

支持切片

压缩率一般;

需要切片需要额外建立索引;

Snappy压缩压缩和解压速度快;

不支持切片;

压缩率一般;

因此,当数据链小于块大小时,考虑压缩与解压缩速度快的Lzo/Snappy。

当数据量非常大时,需要对数据进行切片,需要考虑支持切片的Bzip2和LZO。

(2)压缩阶段选择

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

输入端采用压缩

不需要指定编码方式,hadoop可以自动识别对应的解码方式对文件进行压缩与解压缩。

map输出采用压缩

为了减少maptask与reducetask之间的网络IO传输,重点考虑压缩与解压缩快的LZO与Snappy。

reducer输出采用压缩

如果数据需要永久保存,考虑压缩率较高的Bzip2和Gzip。

如果需要传递给下一个MapReduce需要考虑是否需要进行切片。

四  压缩参数配置与集群设置

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

(2)如果需要在Hadoop中启用压缩,需要配置如下参数

参数默认值阶段

io.compression.codecs  

(在core-site.xml中配置)
无,这个需要在命令行输入hadoop checknative查看输入压缩

mapreduce.map.output.compress

(在mapred-site.xml中配置)

falsemapper输出

mapreduce.map.output.compress.codec

(在mapred-site.xml中配置)

org.apache.hadoop.io.compress.DefaultCodec

mapper输出

mapreduce.output.fileoutputformat

.compress(在mapred-site.xml中配置)

falsereducer输出

mapreduce.output.fileoutputformat

.compress.codec(在mapred-site.xml中配置)

org.apache.hadoop.io.compress.DefaultCodec

reducer输出

五   压缩案例

(1)Map输出端采用压缩

        即使你的MapReduce的输入输出文件都是未压缩的文件,你仍然可以对Map任务的中间结果输出做压缩,因为它要写在硬盘并且通过网络传输到Reduce节点,对其压缩可以提高很多性能,这些工作只要设置两个属性即可。只需在Driver驱动类中增加对应参数即可。

// 开启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); 
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杂乱无章的我

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值