• 关于几种压缩算法以及hadoop和hbase中的压缩配置说明


    Hadoop中常用的压缩算法有bzip2、gzip、lzo、snappy,其中lzo、snappy需要操作系统安装native库才可以支持

    下面这张表,是比较官方一点的统计,不同的场合用不同的压缩算法。bzip2和GZIP是比较消耗CPU的,压缩比最高,GZIP不能被分块并行的处理;Snappy和LZO差不多,稍微胜出一点,cpu消耗的比GZIP少。

    通常情况下,想在CPU和IO之间取得平衡的话,用Snappy和lzo比较常见一些。

    Comparison between compression algorithms

    Algorithm % remaining Encoding Decoding
    GZIP 13.4% 21 MB/s 118 MB/s
    LZO 20.5% 135 MB/s 410 MB/s
    Snappy 22.2% 172 MB/s 409 MB/s

     

    对于数据格式为TextFile,Sequence,以及其他用户自定义的文件格式的文件,都可以采用以上的压缩算法进行压缩;

    TextFile在压缩以后,不能split,压缩出来的数据当做job的输入是一个文件作为一个map。SequenceFile本身是分块的,加上lzo的压缩格式,文件可以实现lzo方式的split操作,可以按照record、block进行压缩,一般采用block效率更高一些。

    一、hadoop(hive)对mapreduce压缩参数设置
    1、mapreduce的中间结果对压缩的支持

    方法一:

    hadoop 中 mapred-site.xml

    <property>

    <name>mapred.compress.map.output</name>

    <value>true</value>

    </property>

    <property>

    <name>mapred.map.output.compression.codec</name>

    <value>com.hadoop.compression.lzo.LzoCodec</value>

    </property>


     方法二

    hive中hive-site.xml

    <property>
      <name>hive.exec.compress.intermediate</name>
      <value>true</value>
      <description>Should the outputs of the maps be compressed before being
                   sent across the network. Uses SequenceFile compression.
      </description>
    </property>
    <property>
      <name>hive.intermediate.compression.codec</name>
      <value>org.apache.hadoop.io.compress.LzoCodec</value>
      <description>If the map outputs are compressed, how should they be
                   compressed?
      </description>
    </property>
    方法三
    hive中shell
    set hive.exec.compress.intermediate=true;

    set hive.intermediate.compression.codec="org.apache.hadoop.io.compress.LzoCodec";

     

    2、mapreduce的输出结果对压缩的支持

    hive-site.xml中配置:

    <property>
      <name>hive.exec.compress.output</name>
      <value>true</value>
      <description>Should the job outputs be compressed?
      </description>
    </property>
    <property>
      <name>mapred.output.compression.codec</name>
      <value>org.apache.hadoop.io.compress.LzoCodec</value>
      <description>If the job outputs are compressed, how should they be compressed?
      </description>
    </property>

     

    或者在hadoop-site.xml中添加:

    <property>
      <name>io.compression.codecs</name>
      <value>org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec,org.apache.hadoop.io.compress.LzoCodec</value>
      <description>A list of the compression codec classes that can be used
                   for compression/decompression.</description>
    </property>
    <property>
      <name>mapred.output.compress</name>
      <value>true</value>
      <description>Should the job outputs be compressed?
      </description>
    </property>
    <property>
      <name>mapred.output.compression.codec</name>
      <value>org.apache.hadoop.io.compress.LzoCodec</value>
      <description>If the job outputs are compressed, how should they be compressed?
      </description>
    </property>

     

    二、HBASE对这三种压缩格式的支持

    HBase中可以对HFile进行gzip、lzo、snappy方式的压缩存储。

    1、对于gzip压缩的支持
    hbase(main):001:0> create 'testtable', { NAME => 'colfam1',
    COMPRESSION => 'GZ' }

    或者alter 'testtable',不过要先disable table,完成压缩后,再enable table

    2、对于lzo的支持,需要系统安装lzo动态库,以及hadoop lzo相关的native库,后把native库jar文件copy到hadoop/lib/native 及 hbase/lib/native中
       同时在core-site.xml中,配置lzo压缩
          
           <property>
             <name>io.compression.codecs</name>
             <value>org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,com.hadoop.compression.lzo.LzoCodec,com.hadoop.compression.lzo.LzopCodec
            </value>
           </property>
          <property>
            <name>io.compression.codec.lzo.class</name>
            <value>com.hadoop.compression.lzo.LzoCodec</value>
          </property>

    org.apache.hadoop.io.compress.DefaultCodec是hadoop默认的zlib压缩

    hbase(main):001:0> create 'testtable', { NAME => 'colfam1',
    COMPRESSION => 'lzo' }
     3、  对于synappy的支持,需要安装snappy,并且 将 hadoop-snappy-0.0.1-SNAPSHOT.tar.gz 的native中的动态静态链接库文件拷到hadoop以及hbase lib的native下面,将hadoop-snappy-0.0.1-SNAPSHOT.jar考到hadoop 以及hbase 的lib下
       在core-site.xml中,配置lzo压缩
          
           <property>
             <name>io.compression.codecs</name>
             <value>org.apache.hadoop.io.compress.SnappyCodec
            </value>
           </property>

    hbase(main):001:0> create 'testtable', { NAME => 'colfam1',
    COMPRESSION => 'synappy' }

  • 相关阅读:
    sqlite android
    cocos2dx 2.1.3 使用json
    cocos2dandroid 自动缩放、高清显示
    cocos2dx HttpClient
    coco2dx 2.1.3 之 使用网络请求
    facebook on android
    项目运行出错怎么办?
    Bug应对策略 本文系转
    从网页中导入Excel
    ASP.NET HTTP运行时组成详解[转帖]
  • 原文地址:https://www.cnblogs.com/java20130722/p/3206943.html
Copyright © 2020-2023  润新知