Hadoop的压缩与Hive中设置Map和Reduce压缩

15 篇文章 1 订阅

目录

综述:

MR支持的压缩方式:

压缩格式和对应的编码解码器:

压缩性能的比较: 

压缩参数的配置:

Hive中指定Map输出压缩:

Hive中指定Reducer输出压缩:


综述:

Hadoop的数据压缩主要在三个地方:Map数据的输入;Mapper数据的输出;Reduce数据的输出;

MR支持的压缩方式:

压缩格式

工具

算法

文件扩展名

是否可切分

DEFLATE

DEFLATE

.deflate

Gzip

gzip

DEFLATE

.gz

bzip2

bzip2

bzip2

.bz2

LZO

lzop

LZO

.lzo

Snappy

Snappy

.snappy

这里谈谈我对上表的理解:我们想要实现 LZO格式的压缩文件,就需要使用把我们的文件压缩成LZO格式的工具,是lzop工具,而这个工具使用的是LZO算法这个方法,这个过程可以理解为,一个文件输入到了一个压缩工具,对这个文件“用刑”,在输出就我们要的压缩格式,这个压缩文件留下这个压缩工具的对其施刑的痕迹---文件扩展名。 

记:hadoop的MapReduce默认Mapper,Reducer的输出都不会对文件进行压缩。

压缩格式和对应的编码解码器:

所谓的编码器,就是在指定了压缩的格式之后,去完成相应的压缩格式的工具。解码器就是,当输入是某一种压缩格式的时候,将压缩格式还原。

压缩格式

对应的编码/解码器

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

Snappy

 

 

250MB/s

500MB/s

压缩参数的配置:

Hadoop中启用压缩,可以配置如下参数(mapred-site.xml文件中)

参数

默认值

阶段

建议

io.compression.codecs   

(在core-site.xml中配置)

org.apache.hadoop.io.compress.DefaultCodec, org.apache.hadoop.io.compress.GzipCodec, org.apache.hadoop.io.compress.BZip2Codec,

org.apache.hadoop.io.compress.Lz4Codec

输入压缩

Hadoop使用文件扩展名判断是否支持某种编解码器

mapreduce.map.output.compress

false

mapper输出

这个参数设为true启用压缩

mapreduce.map.output.compress.codec

org.apache.hadoop.io.compress.DefaultCodec

mapper输出

使用LZO、LZ4或snappy编解码器在此阶段压缩数据

mapreduce.output.fileoutputformat.compress

false

reducer输出

这个参数设为true启用压缩

mapreduce.output.fileoutputformat.compress.codec

org.apache.hadoop.io.compress. DefaultCodec

reducer输出

使用标准工具或者编解码器,如gzip和bzip2

mapreduce.output.fileoutputformat.compress.type

RECORD

reducer输出

SequenceFile输出使用的压缩类型:NONE和BLOCK

参数解读:

【Mapper输出】:mapreduce.map.output.compress的默认值为false,表明Hadoop中Mapper阶段的输出文件是不经过压缩的,但是如果我们将其设置为了true,Hadoop就会对Mapper的输出数据进行一个压缩,一旦压缩就要涉及到编码器,Hadoop使用默认的编码器DefaultCodec,将Mapper的输出数据压缩成为deflate的格式(可查上面第一张表);of course,我们还可以手动设置我们想要的压缩格式,比如我想要snappy的格式,那就需要去设置编码器为SnappyCodec。

设置为true,能够减少job在MapTask和ReduceTask之间的数据传输量,修改为snappy是为了提升压缩速度。

【Reducer输出】:mapreduce.output.fileoutputformat.compress的默认值为false,表示MapReduce中的Reducer阶段输出文件时不经过压缩的,如果我们设置为true,那么将会使用默认的压缩工具DefaultCodec,对于我们的输出文件进行压缩,压缩为deflate的格式,当然我们可以手动指定压缩工具,从而得到我们想要的压缩格式。除此之外,我们还可以设置快压缩。

Hive中指定Map输出压缩:

1.开启hive中间传输数据压缩功能
set hive.exec.compress.intermediate=true;

2.开启mapreduce中map输出压缩功能
set mapreduce.map.output.compress=true;

3.设置mapreduce中map输出数据的压缩方式
set mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;

4.执行查询语句
 select count(ename) name from emp;

Hive中指定Reducer输出压缩:

1.开启hive最终输出数据压缩功能
set hive.exec.compress.output=true;

2.开启mapreduce最终输出数据压缩
set mapreduce.output.fileoutputformat.compress=true;

3.设置mapreduce最终数据输出压缩方式
set mapreduce.output.fileoutputformat.compress.codec =org.apache.hadoop.io.compress.SnappyCodec;

4.设置mapreduce最终数据输出压缩为块压缩
set mapreduce.output.fileoutputformat.compress.type=BLOCK;

5.测试一下输出结果是否是压缩文件
insert overwrite local directory
 '/opt/module/datas/distribute-result' select * from emp distribute by deptno sort by empno desc;

执行结束之后,我们查看一下:
[isea@hadoop108 distribute-result]$ ll
总用量 4
-rw-r--r--. 1 isea isea 446 12月  3 03:32 000000_0.snappy
[isea@hadoop108 distribute-result]$ pwd
/opt/module/datas/distribute-result
[isea@hadoop108 distribute-result]$ cat 000000_0.snappy 
¶34MILLERCLERK77821982-1-231300.0\N10
7902FORDANALYST75661981-12-330.20.0JAMES698[1	950	Z,30
1-175000,787-51.YL844TURNERSALESMAN]9-8150a^L39KINGPRESIDENT\N
|SCOTTB斷-4-196柲8CLARKMANAGER7q%6-924耝!BLAKEJ.5-128.º$654MARTINV鎲812114A5!JONESJc4-22975){!§521WARDNa
-1$369SMITHMgAK                                                                                           2-22a5`499ALLER2-2016
               1980A
                    817800.0\N20
可以看出该文件的后缀为snappy,该文件的内容是你都不认识的sequencefile文件

 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值