hadoop-12 shuffle压缩

数据压缩的意义和好处

在shuffle阶段,有大量的数据拷贝操作:

  • 从Map阶段输出的数据,通过网络拷贝,发送到reduce阶段。

这其中涉及了大量的网络IO,如果数据能够进行压缩,那么数据的发送了就会少的多。
文件压缩的好处就显而易见了:

  • 节约磁盘空间
  • 加速数据在网络和磁盘上的传输

数据压缩格式的对比

常用的数据压缩算法:

常用的算法为LZO和snappy

hadoop支持的压缩算法:
压缩格式工具算法文件扩展名是否可切分
DEFLATEDEFLATE.deflate
GzipDEFLATE.deflate
DEFLATEgzipDEFLATE.gz
bzip2bzip2bzip2bz2
LZOlzopLZO.lzo
LZ4LZ4.lz4
SnappySnappy.snappy

使用不可压缩的数据算法压缩的文件,即使大小超过128M,也不会切割成多个split
强行切分会损坏文件

hadoop压缩算法对应的java类:
压缩格式对应使用的java类
DEFLATEorg.apache.hadoop.io.compress.DeFaultCodec
gziporg.apache.hadoop.io.compress.GZipCodec
bzip2org.apache.hadoop.io.compress.BZip2Codec
LZOcom.hadoop.compression.lzo.LzopCodec
LZ4org.apache.hadoop.io.compress.Lz4Codec
Snappyorg.apache.hadoop.io.compress.SnappyCodec
常见的压缩速率比较:
压缩算法原始文件大小压缩后的文件大小压缩速度解压缩速度
gzip8.3GB1.8GB17.5MB/s58MB/s
bzip28.3GB1.1GB2.4MB/s9.5MB/s
LZO-bset8.3GB2GB4MB/s60.6MB/s
LZO8.3GB2.9GB135 MB/s410 MB/s
snappy8.3GB1.8GB172MB/s409MB/s

查看当前hadoop支持的数据压缩算法:

hadoop checknative

在这里插入图片描述

添加压缩后的mr执行流程

  • MapReduce
  • input
  • mapper
  • shuffle
    • partitioner、sort、combiner、【compress】、group
  • reducer
  • output

如何开启数据压缩

在代码中进行设置压缩

设置map阶段的压缩:
Configuration configuration = new Configuration();
configuration.set("mapreduce.map.output.compress","true");
configuration.set("mapreduce.map.output.compress.codec",
 "org.apache.hadoop.io.compress.SnappyCodec");
设置我reduce阶段的压缩:
configuration.set("mapreduce.output.fileoutputformat.compress","true");
//只有是Sequence的时候,以下Record压缩才起作用
configuration.set("mapreduce.output.fileoutputformat.compress.type","RECORD");
configuration.set("mapreduce.output.fileoutputformat.compress.codec",
"org.apache.hadoop.io.compress.SnappyCodec");
  • 设置snappy压缩之后的输出文件都以.snappy结尾

修改mapred-site.xml进行MapReduce压缩(修改后需要重启集群)

  • 修改配置文件并重启集群后,所有的mr任务都会进行压缩

map输出数据进行压缩

<property>
          <name>mapreduce.map.output.compress</name>
          <value>true</value>
</property>
<property>
         <name>mapreduce.map.output.compress.codec</name>
         <value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>

reduce输出数据进行压缩

<property>       
<name>mapreduce.output.fileoutputformat.compress</name>
 <value>true</value>
</property>
<property>        
<name>mapreduce.output.fileoutputformat.compress.type</name>
<value>RECORD</value>
</property>
 <property>        
 <name>mapreduce.output.fileoutputformat.compress.codec</name>
<value>org.apache.hadoop.io.compress.SnappyCodec</value> 
</property>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值