17、Hadoop压缩相关

Hadoop压缩

概述

压缩的实质是用时间换空间。Hadoop中在处理大数据时,会遇到I/O和网络传输资源不够的情况,此时可以通过压缩的方法通过增加计算减少IO。 因此是否使用压缩遵循运算密集,不用压缩,IO密集使用压缩,当然,除了压缩以外combiner也能减少磁盘IO; Hadoop框架在运行过程中,能够自动识别文件的扩展名,判断文件采用的压缩格式,自动压缩和解压缩,在有些压缩格式下,采用压缩后文件的处理和不采用压缩的文件的处理逻辑一致。

MR支持的压缩编码

  • DEFLATE,Hadoop自带,不可切分,换成压缩格式后的处理方式和普通文本的处理方式一致
  • Gzip,Hadoop自带,不可切分,换成压缩格式后的处理方式和普通文本的处理方式一致
  • bzip2,Hadoop自带,并且可以切分,换成压缩格式后的处理方式和普通文本的处理方式一致,压缩解压缩比较慢,压缩效率高
  • LZO,hadoop不自带,需要安装,可以切分,但是需要建立索引,指定输入格式
  • Snappy,Hadoop不自带,不可以切分,但是压缩解压缩速度极快。

使用场景,不支持切分的应当使压缩后文件的大小不超过一个切片为好。Bzip适用于文件极大时,Lzo同样适用于文件极大的情况。Snappy适用于作为一个mapreduce的输出和另一个MapReduce的输入。

可以压缩的三个位置

  1. 输入端:直接对将要输入的文件压缩。
  2. Mapper输出端:当数据量过大造成网络传输过多,就可以在Mapper输出端指定压缩技术
  3. Reduce输出端:Reduce端压缩就是为了减少磁盘空间,同时如果有下一个Mapper的话,可以提高效率。

这三个压缩位置可以在Driver中进行配置。

// 开启map端输出压缩
configuration.setBoolean("mapreduce.map.output.compress", true);
// 设置map端输出压缩方式
configuration.setClass("mapreduce.map.output.compress.codec", BZip2Codec.class, CompressionCodec.class);
// 设置reduce端输出压缩开启
FileOutputFormat.setCompressOutput(job, true);
// 设置压缩的方式
FileOutputFormat.setOutputCompressorClass(job, BZip2Codec.class); 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值