压缩在Hadoop中的应用

概述

  • 压缩:压缩是一种通过特定的算法来减小计算机文件大小的机制,简单来说就是使用相关压缩技术将文件内容减少的过程
  • 优点:
    1.节省存储空间
    2.减少网络带宽IO
    3.减少磁盘IO

  • 缺点:
    1.压缩解压会有CPU开销
    2.消耗时间

  • 分类:
    1.Lossless 无损压缩,应用在一些日志文件等
    2.Lossy 有损压缩,应用在图片,视频文件等

常用的压缩技术及比较:

这里写图片描述

  • 针对以上压缩技术进行测试
    测试环境:
    8 core i7 cpu
    8GB memory
    64 bit CentOS
    1.4GB Wikipedia Corpus 2-gram text input
  • 结果
    压缩比(Compression Ratio)
    这里写图片描述

    1. Snappy(50%)<LZ4(51%)<LZO(51.2%)<GZip(68%)<BZip2(72%)
    

    压缩速率(Compression Speed)
    这里写图片描述

    1. 可以看出压缩比越高,压缩时间越长:Snappy<LZ4<LZO<GZIP<BZIP2
    
    • gzip:
      优点:压缩比在四种压缩方式中较高;hadoop本身支持,在应用中处理gzip格式的文件就和直接处理文本一样;有hadoop native库;大部分linux系统都自带gzip命令,使用方便。
      缺点:不支持split。

    • lzo压缩
      优点:压缩/解压速度也比较快,合理的压缩率;支持split,是hadoop中最流行的压缩格式;支持hadoop native库;需要在linux系统下自行安装lzop命令,使用方便。
      缺点:压缩率比gzip要低;hadoop本身不支持,需要安装;lzo虽然支持split,但需要对lzo文件建索引,否则hadoop也是会把lzo文件看成一个普通文件(为了支持split需要建索引,需要指定inputformat为lzo格式)。

    • snappy压缩
      优点:压缩速度快;支持hadoop native库。
      缺点:不支持split;压缩比低;hadoop本身不支持,需要安装;linux系统下没有对应的命令。

    • bzip2压缩
      优点:支持split;具有很高的压缩率,比gzip压缩率都\高;hadoop本身支持,但不支持native;在linux系统下自带bzip2命令,使用方便。
      缺点:压缩/解压速度慢;不支持native。
      这里写图片描述

    • 总结
      1.压缩方式的选择应根据不同的应用场景做出相应的选择,利弊权衡做出最优选择。
      2.对于需要并行处理的过程,应优先考虑可split的压缩,这会使得任务被并行处理,缩短处理时间。
      3.hadoop应根据输入,中间,输出,不同的过程进行合适选择

Hadoop配置压缩

  • core-site.xml

    1. <property>
    2.     <name>io.compression.codecs</name>
    3.     <value>
    4.     org.apache.hadoop.io.compress.GzipCodec,
    5.     org.apache.hadoop.io.compress.DefaultCodec, #zlib->Default
    6.     org.apache.hadoop.io.compress.BZip2Codec,
    7.     org.apache.hadoop.io.compress.LzoCodec,
    8.     org.apache.hadoop.io.compress.Lz4Codec,
    9.     org.apache.hadoop.io.compress.SnappyCodec,
    10.     </value>
    11. </property>
    
  • mapred-site.xml

    1. <property>
    2.              #支持压缩
    3.     <name>mapreduce.output.fileoutputformat.compress</name>
    4.     <value>true</value>
    5. </property>
    6.             #压缩方式
    7. <property>
    8.     <name>mapreduce.output.fileoutputformat.compress.codec</name>
    9.     <value>org.apache.hadoop.io.compress.BZip2Codec</value>
    10. </property> 
    

压缩在MR中的应用

这里写图片描述
考虑思路:hdfs ==> map ==> shuffle ==> reduce
1. Use Compressd Map Input:从HDFS中读取文件进行Mapreuce作业,如果数据很大,可以使用压缩并且选择支持分片的压缩方式(Bzip2,LZO),可以实现并行处理,提高效率,减少磁盘读取时间,同时选择合适的存储格式例如Sequence Files,RC,ORC等;
2. Compress Intermediate Data:Map输出作为Reducer的输入,需要经过shuffle这一过程,需要把数据读取到一个环形缓冲区,然后读取到本地磁盘,所以选择压缩可以减少了存储文件所占空间,提升了数据传输速率,建议使用压缩速度快的压缩方式,例如Snappy和LZO.
3. Compress Reducer Output:进行归档处理或者链接Mapreduce的工作(该作业的输出作为下个作业的输入),压缩可以减少了存储文件所占空间,提升了数据传输速率,如果作为归档处理,可以采用高的压缩比(Gzip,Bzip2),如果作为下个作业的输入,考虑是否要分片进行选择。

  • 中间压缩选择和配置
    对于Shuffle过程压缩的选择,应考虑压缩速率来减少CPU处理时间
    配置mapred-site.xml以使用压缩:

    1. <property>
    2.     <name>mapreduce.map.output.compression</name>
    3.     <value>true</value>
    4. </property>
    5. <property>
    6.          <name>mapreduce.map.output.compression.codec</name>
    7.          <value>org.apache.hadoop.io.compress.SnappyCodec</value>
    8.    </property> 
    
  • 最终压缩选择和配置

    1. <property>
    2.     <name>mapreduce.output.fileoutputformat.compress</name>
    3.     <value>true</value>
    4. </property>
    5. <property>
    6.     <name>mapreduce.output.fileoutputformat.compress.codec</name>
    7.     <value>org.apache.hadoop.io.compress.BZip2Codec</value>
    8. </property>
    
  • 使用wc进行实例说明:
    input.txt文件

    1. [hadoop@hadoop data]$ cat input.txt 
    2. hello java
    3. hello hadoop
    4. hello hive
    5. hello sqoop
    6. hello hdfs
    7. hello spark
    

    mapred-site.xml

    1. <configuration>
    2. <property>
    3.         <name>mapreduce.framework.name</name>
    4.                 <value>yarn</value>
    5. </property>
    6. <property>
    7.         <name>mapreduce.output.fileoutputformat.compress</name>
    8.                 <value>true</value>
    9. </property>
    10. <property>         
    11.          <name>mapreduce.output.fileoutputformat.compress.codec</name>                   
    12.         <value>org.apache.hadoop.io.compress.BZip2Codec</value>
    13. </property>
    
    14. </configuration>
    

计算wc

    1. [hadoop@hadoop mapreduce]$ hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar wordcount /input.txt /wc/output

    2. [hadoop@hadoop mapreduce]$ hdfs dfs -ls /wc/output
    3. Found 2 items
    4. -rw-r--r--   3 hadoop supergroup          0 2018-03-02 15:54 /wc/output/_SUCCESS
    5. -rw-r--r--   3 hadoop supergroup         77 2018-03-02 15:54 /wc/output/part-r-00000.bz2

    6. .bz2出现成功

Hive使用压缩

  • 设置
    SET hive.exec.compress.output=true; //默认不支持压缩
    SET mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.BZip2Codec;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值