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 > |
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 > |
$ 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性能。
相关文章推荐
- Tomcat 的 SSL 配置
- OpenGL矩阵推导——模型视图变化
- Linux连接Windows共享文件夹
- 打开文件的shell脚本
- PHP apache2.2 mysql 的安装
- 虚拟机下(Ubuntu12.04)与windows文件共享传输
- Nginx-防止负载过高模块sysguard
- "Linus Torvalds" 语录
- "Linus Torvalds" 语录
- shell 批量修改密码
- scope_identity() 与 @@identity的区别
- Hadoop2.2.0版本多节点集群安装及测试
- linux下检测ip冲突
- linux上telnet安装
- 一些有用的linux命令
- 第一次亲密接触(1)
- Shell编程笔记
- 编译内核linux-2.6.38 出现error (2013-03-28 10:42)
- 提升基于英特尔®架构的 Android* 模拟器的速度
- Linux Shell编程入门