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

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

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

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>JAVA_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性能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值