您的位置:首页 > 运维架构

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

2013-10-29 10:58 495 查看


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 J***A_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

01
<
property
>
02
<
name
>io.compression.codecs</
name
>
03
<
value
>
04
org.apache.hadoop.io.compress.GzipCodec,
05
org.apache.hadoop.io.compress.DefaultCodec,
06
org.apache.hadoop.io.compress.BZip2Codec,
07
com.hadoop.compression.lzo.LzoCodec,
08
com.hadoop.compression.lzo.LzopCodec
09
</
value
>
10
</
property
>
11
<
property
>
12
<
name
>io.compression.codec.lzo.class</
name
>
13
<
value
>com.hadoop.compression.lzo.LzoCodec</
value
>
14
</
property
>
$ sudo vim /etc/hadoop-0.20/conf/mapred-site.xml

view
source

print?

01
<
property
>
02
<
name
>mapred.compress.map.output</
name
>
03
<
value
>true</
value
>
04
</
property
>
05
<
property
>
06
<
name
>mapred.map.output.compression.codec</
name
>
07
<
value
>com.hadoop.compression.lzo.LzoCodec</
value
>
08
</
property
>
09
<
property
>
10
<
name
>mapred.child.env</
name
>
11
<
value
>J***A_LIBRARY_PATH=/usr/lib/hadoop-0.20/lib/native/Linux-amd64-64/</
value
>
12
</
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性能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: