标签为 lzo 的文章

Hadoop使用lzo压缩提升I/O性能

参考文档:
http://www.haogongju.net/art/1576460

Hadoop经常用于处理大量的数据,如果期间的输出数据、中间数据能压缩存储,对系统的I/O性能会有提升。
综合考虑压缩、解压速度、是否支持split,目前lzo是最好的选择。

下面是具体的安装与配置过程:

1. 安装系统lzo
$ sudo apt-get install liblzo2-2 liblzo2-dev

2. 下载hadoop-lzo的tar包
$ wget -O kevinweil-hadoop-lzo.tar.gz https://nodeload.github.com/kevinweil/hadoop-lzo/tarball/master

3. 编译hadoop-lzo
$ sudo apt-get install gcc ant

$ export JAVA_HOME=/usr/lib/jvm/java-6-sun
$ tar xzvf kevinweil-hadoop-lzo.tar.gz
$ cd kevinweil-hadoop-lzo-6bb1b7f/
$ ant compile-native tar
...
BUILD SUCCESSFUL
Total time: 20 seconds

4. 将编译完成的文件复制到Hadoop中
$ cp build/hadoop-lzo-0.4.15.jar /usr/lib/hadoop-0.20/lib/
$ cp build/native/Linux-amd64-64/lib/libgplcompression.* /usr/lib/hadoop-0.20/lib/native/Linux-amd64-64/

5. 重启Hadoop的tasktracker进程
$ sudo /etc/init.d/hadoop-0.20-tasktracker restart

6. 接着,我们就可以在程序中,把输出结果通过lzo进行压缩:
SequenceFileOutputFormat.setOutputCompressionType(job, CompressionType.BLOCK);
SequenceFileOutputFormat.setCompressOutput(job, true);
SequenceFileOutputFormat.setOutputCompressorClass(job, LzoCodec.class);

7. 最后,修改Hadoop配置文件,增加以下参数
$ sudo vim /etc/hadoop-0.20/conf/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,
    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>

$ sudo vim /etc/hadoop-0.20/conf/mapred-site.xml

<property>
  <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>
<property>
  <name>mapred.child.env</name>
  <value>JAVA_LIBRARY_PATH=/usr/lib/hadoop-0.20/lib/native/Linux-amd64-64/</value>
</property>

然后重启Hadoop相关进程
$ sudo /etc/init.d/hadoop-0.20-jobtracker restart
$ sudo /etc/init.d/hadoop-0.20-tasktracker restart
$ sudo /etc/init.d/hadoop-0.20-datanode restart

这样Hadoop在读取这些文件时,会自动进行解压。

压缩后的文件大小约为原来的50%,能够比较好的改善Hadoop的I/O性能。

,

No Comments