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