原文:https://www.jianshu.com/p/c8c97a9462ff
1、压缩Compression
压缩有两大好处:可以减少文件存储所需要的磁盘空间,其次是可以加快数据在网络和磁盘上的传输
压缩的缺点:CUP消耗大
Hadoop中常见的压缩方式有:GZIP、BZIP2、LZO(LZF/LZ4)、Snappy
工作中如何选择压缩方式需要考虑的因素有2个:压缩比(压缩前后百分比)、压缩/解压的速度
压缩比
bzip2:30% snappy、lz4、lzo 50% Gzip处于两者中间
压缩/解压时间
压缩比与解压时间成反比,工作中如果需要更加节省空间,则选择压缩比高的;如果要求执行速度快的,则选择压缩速度快的
ex:历史数据(老数据),则选择压缩比大的
2、压缩在Hadoop中的应用
1.Hadoop jobs 通常是IO密集的,压缩数据可以提升IO操作
2.压缩可以降低数据的大小,加速网络传输
3.一个job的性能会有很大的提升有可能仅仅通过一个简单的压缩
4.必须考虑是否可分割(splittability)
可压缩
bzip2 :可分割 LZO:通常不能分割,但可以创建一个索引之后,就可以分割
ex:1G数据,如果没有压缩, 会有8个Map Task
1G gzip的压缩数据:只有1个Map Task
1G bzip2 压缩数据:会有8个Map Task 并行传输
Hadoop中常用Codec压缩,我们只需要配置在hadoop的配置文件中即可
core-site.xml -------------------->Map Input
<property>
<name>compression.codes</name>
<value>
org.apache.hadoop.io.compress.GzipCodec, //Gzip org.apache.hadoop.io.compress.DefaultCodec, // Zlib org.apache.hadoop.io.compress.BZip2Codec, //常用 com.hadoop.compression.lzo.LzopCodec, //常用 org.apache.hadoop.io.compress.Lz4Codec, org.apache.hadoop.io.compress.Snappycodec,
</value>
</property>
mapred-site.xml
<property>
<name>mapreduce.output.fileoutputformat.compress</name>
<value>true</value>
<name>mapreduce.map.output.compress </name>
<value>true</value>
</property>
<property>
<name>mapreduce.map.output.compress .codec</name>
<value>org.apache.hadoop.io.compress.LZOCodec</value>
<name>mapreduce.output.fileoutputformat.compress.codec</name>
<value>org.apache.hadoop.io.compress.BZip2Codec</value> //bzip2压缩
</peoperty>
3、压缩在MapReduce中的应用
压缩在MapReduce中应用
一、Map Input
1.MapReduce左右会从HDFS读数据
2.如果压缩了比较大的输入数据,则减少了磁盘读的成本
3.使用可分割的压缩方式 (比如Bzip2)
4.使用分割方式压缩,还需要配合Sequence Files、RC Files,不仅要压缩还有结合存储格式
总结:尽可能的使用分割
二、Compress Intermediate Data
1.map的输出需要通过网络传输写到磁盘
2.通常情况下使用压缩来减少磁盘读写和网络的传输
3.压缩中间数据会带来优化即使输入输出都不使用压缩
4.建议使用最快的压缩方式
三、Compress Reduce output
1.MapReduce的输出经常被用作为归档或者下一个作业的输入
2.使用压缩来降低归档所耗的磁盘空间
3.使用高压缩比的压缩方式来节约更多的磁盘空间
4.如果这个输出作为下一个作业的输入,则应该优先选择可分割的压缩方式
作者:糊涂蟲
链接:https://www.jianshu.com/p/c8c97a9462ff
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。