zoukankan      html  css  js  c++  java
  • 大数据的压缩格式

    为什么map端用snappy压缩格式;而reduce用gzip或者bzip2的压缩格式呢?为什么每个reduce端压缩后的数据不要超过一个block的大小呢?      

    检查Hadoop版本的压缩格式是否可用【我在Hadoop cdh 5.7版本中查看Hadoop压缩格式】

    一、在解答上述问题以前,我们先说一下压缩的优缺点

    【优点】

    •   1.减少磁盘存储空间
    •   2.降低IO(其中包括网络IO和磁盘IO)
    •   3.加快数据在磁盘和网络中的传输速度,从而提高系统的处理速度

    【缺点】

      1.由于使用数据时需要先解压,就会加重CPU的负荷

    二、压缩格式

    压缩格式 工具 算法 扩展名 是否支持分割 Hadoop编码/解码
    DEFLATE N/A DEFLATE .deflate No org.apache.hadoop.io.compress.DefalutCodec
    gzip gzip DEFLATE .gz No org.apache.hadoop.io.compress.GzipCodec
    bzip2 bzip2 bzip2 .bz2 Yes org.apache.hadoop.io.compress.Bzip2Codec
    LZO Lzop LZO .lzo Yes(if index) com.hadoop.compression.lzo.LzoCodec
    LZ4 N/A LZ4 .lz4 No org.apache.hadoop.io.compress.Lz4Codec
    Snappy N/A Snappy .snappy No org.apache.hadoop.io.compress.SnappyCodec

                                    

    【压缩比】

     

    从上图可以看出,压缩比越高,压缩速率越慢,压缩时间越长,压缩比:Snappy<LZ4<LZO<GZIP<BZIP2(注意,压缩比的大小不是通过数字的大小来看的,是数字越小,压缩比越大,所以snappy的压缩比是22.2%,数据最大,但是压缩比是最小的)

     三、各自压缩格式的优缺点。

    【gzip】

     优点:

    • 1@压缩比在四中压缩方式中较高;
    • 2@hadoop本身支持,在应用中处理gzip格式的文件就和直接处理文本一样,
    • 3@有hadoop native库;
    • 4@大部分linux系统自带gzip命令,使用方便

    缺点:

    • 1@不支持split

    【lzo】

    优点:

    • 1@压缩速率仅次于gzip,解压速率是最快的
    • 2@支持split,是hadoop中最流行的压缩格式;
    • 3@支持hadoop native库
    • 4@需要在linux系统下自行安装lzop命令,使用方便

    缺点:

    • 1@压缩比要比gzip低
    • 2@hadoop本身比支持,需要安装;
    • 3@lzo虽然支持split,但是需要对lzo文件建索引,否则hadoop也是会把lzo文件看成一个普通文件(为了支持split需要建索引,需要制定inputformat为lzo格式)

    【snappy】

    优点:

    • 1@压缩速度最快
    • 2@支持hadoop native库

    缺点

    • 1@不支持split
    • 2@压缩比最低
    • 3@hadoop本身不支持,需要安装
    • 4@linux系统下没有对应的命令

    【bzip2】

    优点:

    • 1@支持split
    • 2@压缩比最高,比gzip都高;
    • 3@hadoop本身支持,但不支持native
    • 4@在linux系统下自带bzip2命令,使用方便

    缺点:

    • 1@压缩解压速率慢
    • 2@不支持native

    【总结】

    每一种压缩方式都有他的优缺点,讲求压缩效率,压缩比就会低,占用的网络io和磁盘io就多,讲求压缩比,对cpu的损耗就比较大,同时压缩和解压的耗时就比较多,

    对于支持split的(lzo和bzip)可以实现并行处理。

    【应用场景】

    一般在HDFS 、Hive、HBase中会使用;

    当然一般较多的是结合Spark 来一起使用。

    现在再让我们回过头来看我们刚刚开始提出的问题

    【为什么map端用snappy压缩格式;而reduce用gzip或者bzip2的压缩格式呢?为什么每个reduce端压缩后的数据不要超过一个block的大小呢?】

    这个问题可以结合前边老师提出的为什么MR的执行性能不理想来考虑?

    当时这个问题的答案是因为每次都要落地到磁盘,

       1、Map压缩主要是增加mr运行的效率,我们就需要找压缩效率最高的压缩格式,snappy的压缩时间最快

        2、Reduce压缩就是输出文件压缩 ,故考虑占用磁盘空间的大小;选择高压缩比gzip或者bzip2;而考虑到会用reduce结果做二次运算;

              则对于选用不支持分割gzip或者bzip2原因有两个:

            (1)是这两个压缩格式高

            (2)对于不可分割我们采用每个reduce端压缩后的数据不要超过一个block的大小的方法;则对于后续的map清洗也就不会出现分割问题。

    【压缩在hadoop中的应用】

    参考博客:https://my.oschina.net/u/4005872/blog/3030869

  • 相关阅读:
    android用户界面之WebView教程实例汇总
    android用户界面之TabHost教程实例汇总
    手把手教你写android项目@第一期项目——身份证查询创新(项目总结)
    android用户界面之GridView教程实例汇总
    android学习从模仿开始 —— 模仿UI 导航帖
    Android 实现书籍翻页效果
    android用户界面之Widget教程实例汇总
    如何安装webdriver chrome浏览器支持
    Seleniumwebdriver系列教程(15)————使用已存在的profile启动firefox
    ruby设计模式之【观察者】模式1————简单的观察者模式
  • 原文地址:https://www.cnblogs.com/xuziyu/p/10678135.html
Copyright © 2011-2022 走看看