1. 程式人生 > >hadoop新增snappy解壓縮庫

hadoop新增snappy解壓縮庫

Snappy是用C++開發的壓縮和解壓縮開發包,旨在提供高速壓縮速度和合理的壓縮率。

雖然生成的壓縮檔案可能會比其他壓縮庫的要大上20%至100%,但是,相比其他的壓縮庫,Snappy卻能夠在特定的壓縮率下擁有驚人的壓縮速度。

也就是說用空間換取速度

1、安裝snappy

yum install snappy snappy-devel

2、給hadoop環境增加 snappp.so檔案

ln -sf /usr/lib64/libsnappy.so $HADOOP_HOME/lib/native/.

3、新增配置

在core-site.xml檔案中加入snappy配置
<property>
    <name>io.compression.codecs</name>
    <value>
      org.apache.hadoop.io.compress.GzipCodec,
      org.apache.hadoop.io.compress.DefaultCodec,
      org.apache.hadoop.io.compress.BZip2Codec,
      org.apache.hadoop.io.compress.SnappyCodec
    </value>
</property>

4、如果map的輸出啟用snappy壓縮
<property> 
    <name>mapreduce.map.output.compress</name> 
    <value>true</value> 
</property> 

<property> 
    <name>mapreduce.map.output.compress.codec</name> 
    <value>org.apache.hadoop.io.compress.SnappyCodec</value> 
</property> 

5、重新啟動hadoop,使得上面的配置生效。

如果你要在Mapreduce程式裡面使用Snappy相關類庫,可以用下面的方法實現
Configuration conf = new Configuration();
//對map輸出的內容進行壓縮
conf.set("mapred.compress.map.output","true");
conf.set("mapred.map.output.compression.codec","org.apache.hadoop.io.compress.SnappyCodec");

//對reduce輸出的內容進行壓縮
conf.set("mapred.output.compress","true");
conf.set("mapred.output.compression","org.apache.hadoop.io.compress.SnappyCodec");