Hadoop压缩方式

首先简单介绍MapReduce框架的I/O处理各个步骤:

1)从HDFS读取文件输入到Map程序中
2)将Mapper程序中的输出结果保存到本地中
3)Reducer从Mapper获取数据文件,即Reducer与Mapper之间进行网络传输操作
4)Reducer从Mapper获取相应分区的所有数据之后,会进行数据合并操作,此过程中,Reducer端对
接收到数据进行排序。
5)Reducer实例从本地硬盘中读取所有已经整理好的数据记录,调用reduce方法对数据进行处理。
6)Reducer程序的输出结果重新写回到HDFS中。

1.压缩内容选择
1)输入文件的压缩:如果对输入文件进行压缩,则将输入块读入Mapper程序中时可进行更少的I/O处理。然而,解压文件时需要消耗更多的CPU周期。
2)压缩Mapper程序的中间输出:在一个MapReduce程序中,Mapper程序中会Mapper节点上产生中间结果,这些文件被对应的Reducer程序进行分区,根据分区进行排序,并且由Reducer程序利用HTTP协议进行下载。压缩这类输出可减少文件从Mapper程序中写入到本地磁盘的文件I/O,也可以减少分区从Mapper节点传输到Reducer节点的网络I/O。
3)压缩MapReduce程序的输出:不管程序是否需要进行Reducer阶段的处理。都只对需要进行Map处理的程序应用Mapper程序进行输出,对经过Reducer处理的程序应用Reducer程序进行输出。

2.压缩方式
可使用三种标准对压缩方式进行评价
1)压缩文件的大小:越小越好,因为在磁盘和网络之间进行读写时涉及的I/O操作越少越好
2)压缩文件所用时间:越快愈好
3)已经压缩的格式是否可以进行再分割:可以分割的格式允许单一文件由多个Mapper程序处理,可实现更好的并行度。
上述三种压缩方式需要进行权衡,例如实现更快压缩的方式下需要占用更多CPU周期。

常用压缩方式的对比表格
这里写图片描述

上述Snappy压缩方式比GZIP方式快几个数量级,然而输出文件更大,大出20%-100%。Snappy压缩源于Google并广泛应用MapReducer程序和衍生框架中

Hadoop框架中带有对文件进行压缩和解压缩的编码解码器(一个编码解码器CompressionCodec类的实现)。编码解码器列表由core-site.xml中的io.compression.codecs属性提供,它的值是由逗号列表,每项是CompressionCodec实现类的全类名。

默认情况是不启动压缩。可以将mapred-site.xml中的下列属性值设置为true以启用压缩。
mapreduce.output.fileoutputformat.compress 用于输出
mapreduce.map.output.compress用于Mapper程序中间输出
mapreduce.output.fileoutputformat.compress.codec 为输出配置默认的编码解码器
mapreduce.ma.output.compress.codec Mapper程序中间输出配置默认的编码解码器

3.配置压缩方式

打开压缩用于输出,在配置时添加下面几行:
Configuration cond = new Configuration();
Jon job = new Job(conf);
FileOutput.setCompressOutput(job,true);
FileOutput.setOutputCompressionClass(job,GzipCodec.class);
使用Snappy的编码解码器
FileOutputFormat.setOutputCompressionClass(job,SnappyCodec.class)
打开压缩用于Mapper程序的中间输出,在配置时我们添加下面的几行
Configuration conf = new Configuration();
conf.setBoolean("mapreduce.map.output.compress",true);
conf.setClass("mapreduce.map.output.compress.codec",GzipCodec.class,CompressionCodec.class);
FileOutput.setCompressOutput(job,true);
FileOutput.setOutputCompressionClass(job,GzipCodec.class);
Job job = new Job(conf);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值