snappy是google的一个开源的压缩库,在合理的压缩率的前提下提供了提供了一个很高的压缩/解压的速度,利用单颗Intel Corei7处理器内核处理达到每秒处理250MB~500MB的数据流。snappy压缩在hadoop中不是自带的,本文介绍在hadoop2.0中安装和配置snappy压缩,使hadoop2.0支持snappy压缩。

1 安装snappy库

可以从https://code.google.com/p/snappy/下载源码,通过编译源码安装

tar -zxvf snappy-1.1.1.tar.gz
cd snappy-1.1.1
./configure
make
sudo make install

也可以直接用yum来安装

sudo yum install snappy snappy-devel

2 安装hadoop-snappy包

https://github.com/electrum/hadoop-snappy下载hadoop-snappy包hadoop-snappy-master.zip

解压

unzip hadoop-snappy-master.zip

解压后是一个hadoop-snappy-master文件夹

编译

cd hadoop-snappy-master/
mvn package -Dsnappy.prefix=/usr/local

注意-Dsnappy.prefix是设置你的snappy安装的目录,默认是/usr/local

编译后把本地库文件和jar包(编译后可能已经打在一个压缩包里,需要先解压)拷贝到相应的目录

tar -zxvf hadoop-snappy-0.0.1-SNAPSHOT.tar.gz
cp-r hadoop-snappy-0.0.1-SNAPSHOT/lib/* $HADOOP_HOME/lib

Snappy 0.0.1-SNAPSHOT/目录包含本地库和hadoop-snappy-0.0.1-SNAPSHOT.jar包,都需要拷贝到相应的目录。

注:按照文档的说法,编译好的tar包里已经带有snappy的native库,因此第一步“1 安装snappy库”可以省略。

3 修改hadoop配置文件core-site.xml

<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 重启hadoop集群

这样,我们hadoop服务器上的hadoop snappy就安装成功了。

5 实战tips

  • 在hadoop2.0中,把hadoop-snappy-0.0.1-SNAPSHOT.jar包拷贝到$HADOOP_HOME/share/hadoop/mapreduce/lib/或者$HADOOP_HOME/share/hadoop/mapreduce/目录下,不需要重启hadoop集群。

  • hadoop服务器的每台机器都需要安装和配置。

  • hadoop客户机snappy的安装和配置的方法与hadoop服务器一样。

参考资料

https://code.google.com/p/snappy/

https://github.com/electrum/hadoop-snappy

https://code.google.com/p/hadoop-snappy/

http://code.google.com/p/hadoop-gpl-compression