• hadoop经常使用的压缩算法总结和实验验证



    压缩格式总表

    压缩格式

    工具

    算法

    扩展名

    是否可切分

    DEFLATE

    N/A

    DEFLATE

    .deflate

    No

    gzip

    gzip

    DEFLATE

    .gz

    No

    bzip2

    bzip2

    bzip2

    .bz2

    Yes

    LZO

    lzop

    LZO

    .lzo

    No

    LZ4

    N/A

    LZ4

    .lz4

    No

    Snappy

    N/A

    Snappy

    .snappy

    No











    压缩算法的时间空间权衡

    全部的压缩算法都是时间和空间的转换。更快的压缩时间还是更小的压缩比,能够通过參数来指定,-1意味着速度,-9意味着空间。

    比如:

    Gzip -1  file

    压缩算法的速度和压缩比例的特点

    压缩算法

    特点

    速度和压缩比

    DEFLATE

    标准压缩算法,没有生成它的经常使用命令行工具,通常都是用Gzip格式,也就是在deflate格式上加入gzip的文件头和文件尾。.deflate扩展名是hadoop定义的

    ——

    Gzip

    DEFLATE为基础扩展出来的一种算法;

    通用压缩工具。时间和空间消耗比較折中

    折中

    Bzip2

    压缩效果最好,可是压缩和解压速度最慢;

    本身的解压速度比压缩速度快

    压缩效果最好,速度最慢

    LZO

    比gzip速度快,可是压缩效果不好

    压缩效果不好。

    速度快

    LZ4

    比gzip速度快,可是压缩效果不好。

    解压比LZO快

    压缩效果不好,

    速度快

    Snappy

    压缩效果不好,

    速度快

    实验验证

    以下是在某公司利用真实的交易数据进行的压缩測试。因为LZO没有安装对应组件未做測试。

    从真实的实验能够看出,snappy用时最短。bzip2用时最长。Deflate实际上採用了Gzip算法,所以用时和压缩率接近。因为实验只做了一次。再加上測试时间不同,集群性能可能也会有差异。理论上LZ4应该比gzip快。

    压缩算法

    表名

    压缩时间

    total time

    原大小

    压缩后大小

    压缩比

    Gzip

    a

    333.276 s

    0 hours

    23 min 28 s

    71.9G

    8.1 G

    7.9%

    b

    321.246 s

    229.7 G

    9.4 G

    c

    281.316 s

    109.9 G

    7.6 G

    d

    379.03 s

    71.9 G

    13.2 G

    e

    73.333 s

    5.8 G

    276.0 M

     

    bzip2

    a

    481.926 s

    0 hours

     32 min 10 s

    71.9G

    6.3 G

    6.6%

    b

    478.724 s

    229.7 G

    8.3 G

    c

    404.097 s

    109.9 G

    6.4 G

    d

    424.537 s

    71.9 G

    11.0 G

    e

    125.326 s

    5.8 G

    217.6 M

     

    deflate

    a

    250.34 s

    0 hours

     20 min 52 s

    71.9G

    8.1 G

    7.9%

    b

    301.89 s

    229.7 G

    9.4 G

    c

    264.25 s

    109.9 G

    7.6 G

    d

    337.296 s

    71.9 G

    13.2 G

    e

     73.91 s

    5.8 G

    275.9 M

     

    LZ4

    a

    459.488 s

    0 hours

     30 min 27 s

    71.9G

    15.2 G

    13.4%

    b

    478.385 s

    229.7 G

    16.1 G

    c

    399.978 s

    109.9 G

    12.5 G

    d

    412.668 s

    71.9 G

    21.2 G

    e

    60.985 s

    5.8 G

    509.6 M

     

    Snappy

    a

    216.268 s

     0 hours

    19 min 6 s

    71.9G

    14.0 G

    13%

    b

    281.972 s

    229.7 G

    16.0 G

    c

    241.483 s

    109.9 G

    12.2 G

    d

    322.299 s

    71.9 G

    20.7 G

    e

    63.202 s

    5.8 G

    548.5 M

    以上採用hive进行測试,每次新建一个rcfile格式的表。从原始数据insert overwrite select进行数据导入,在运行脚本之前设置压缩算法,压缩算法的设置例如以下:

    set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
    set mapred.min.split.size=536870912;
    set mapred.min.split.size.per.node=536870912;
    set mapred.min.split.size.per.rack=536870912;
    set mapred.output.compress=true;
    
    --设置压缩功能开启
    SET hive.exec.compress.output=true; 
    --设置压缩编码
    SET mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
    --SET mapred.output.compression.codec=com.hadoop.compression.lzo.LzopCodec;
    --SET mapred.output.compression.codec=org.apache.hadoop.io.compress.Lz4Codec;
    --SET mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;
    --SET mapred.output.compression.codec=org.apache.hadoop.io.compress.DefaultCodec;--deflate
    --SET mapred.output.compression.codec=org.apache.hadoop.io.compress.BZip2Codec;
    --设置压缩类型block  
    SET mapred.output.compression.type=BLOCK;   
    set hive.exec.dynamic.partition=true;
    set hive.exec.dynamic.partition.mode=nonstrict;

    
    




  • 相关阅读:
    理解和学习qml
    (离线)英语词典软件推荐
    Ubuntu:安装deb文件包以及deb卸载
    mac man汉化方法
    Linux中文件和目录的权限(r, w, x)
    解决mac休眠掉电的解决方法
    线程池之ThreadPool与ForkJoinPool
    程序员的知识焦虑
    回顾2018,展望2019
    NIO基础学习——缓冲区
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/7027033.html
Copyright © 2020-2023  润新知