關於幾種壓縮算法以及hadoop和hbase中的壓縮配置說明

Hadoop中經常使用的壓縮算法有bzip二、gzip、lzo、snappy,其中lzo、snappy須要操做系統安裝native庫才能夠支持算法

下面這張表,是比較官方一點的統計,不一樣的場合用不一樣的壓縮算法。bzip2和GZIP是比較消耗CPU的,壓縮比最高,GZIP不能被分塊並行的處理;Snappy和LZO差很少,稍微勝出一點,cpu消耗的比GZIP少。shell

一般狀況下,想在CPU和IO之間取得平衡的話,用Snappy和lzo比較常見一些。apache

Comparison between compression algorithmsapp

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,以及其餘用戶自定義的文件格式的文件,均可以採用以上的壓縮算法進行壓縮;oop

TextFile在壓縮之後,不能split,壓縮出來的數據當作job的輸入是一個文件做爲一個map。SequenceFile自己是分塊的, 加上lzo的壓縮格式,文件能夠實現lzo方式的split操做,能夠按照record、block進行壓縮,通常採用block效率更高一些。
操作系統

1、hadoop(hive)對mapreduce壓縮參數設置
一、mapreduce的中間結果對壓縮的支持code

方法一:xml

hadoop 中 mapred-site.xmlip

<property>hadoop

<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";

 

二、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>

 

2、HBASE對這三種壓縮格式的支持

HBase中能夠對HFile進行gzip、lzo、snappy方式的壓縮存儲。

一、對於gzip壓縮的支持
hbase(main):001:0> create 'testtable', { NAME => 'colfam1',
COMPRESSION => 'GZ' }

或者alter 'testtable',不過要先disable table,完成壓縮後,再enable table

二、對於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' }
 三、  對於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' }

相關文章
相關標籤/搜索