首页 > 代码库 > Nutch学习笔记11---1.7local模式启用压缩算法

Nutch学习笔记11---1.7local模式启用压缩算法

压缩优化
由于hadoop的很多结果都是由mr触发,mr中间伴随着很多硬盘IO。
所以这里需要启用压缩算法,减少IO数据量,减少IO时间。

症状表现:运行时看到
2014-07-14 18:13:09,386 WARN  util.NativeCodeLoader - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
2014-07-14 18:13:09,437 WARN  snappy.LoadSnappy - Snappy native library not loaded


解决思路:
http://www.cnblogs.com/jiama/archive/2013/05/03/3056419.html
http://yeelor.iteye.com/blog/1991075
http://code.google.com/p/hadoop-snappy/





解决方案:
1 找到程序运行时的-Djava.library.path
比如:
-Djava.library.path=/usr/local/nutch-1.7/runtime/local/lib/native/Linux-amd64-64

2 复制libhadoop.so到此目录
wget  http://archive.apache.org/dist/hadoop/core/hadoop-1.1.2/hadoop-1.1.2.tar.gz
tar -zvxf hadoop-1.1.2.tar.gz
cd hadoop-1.1.2

搜索libhadoop.so
find ./ -name libhadoop.so
./lib/native/Linux-i386-32/libhadoop.so
./lib/native/Linux-amd64-64/libhadoop.so

根据自己的主机架构,复制相应的libhadoop.so文件到java.library.path中去。

3 下载编译libsnappy.so
打开http://code.google.com/p/snappy/
或者直接下载wget http://snappy.googlecode.com/files/snappy-1.1.0.tar.gz
tar -zvxf snappy-1.1.0.tar.gz 
cd snappy-1.1.0
./configure
make
find ./ -name libsnappy.so
结果是找到了./.libs/libsnappy.so
注意:这里是一个链接文件,要把真正的文件复制到java.library.path中去。
4 修改配置文件
vi conf/nutch-site.xml
// Compress Map output
<property>
 <name>mapred.compress.map.output</name>
 <value>true</value>
</property>

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

// Compress MapReduce output
<property>
 <name>mapred.output.compress</name>
 <value>true</value>
</property>

<property>
 <name>mapred.output.compression</name>
 <value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>