读书人

hadoop运用lzo压缩文件笔记 (CDH3u1)

发布时间: 2012-06-29 15:48:47 作者: rapoo

hadoop使用lzo压缩文件笔记 (CDH3u1)
LZO性能

CompressionFileSize (GB)Compression Time (s)Decompression Time (s)Nonesome_logs8.0--Gzipsome_logs.gz1.324172LZOsome_logs.lzo2.05535

?

编译LZO

下载:

?

http://www.oberhumer.com/opensource/lzo/download/

?

wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.06.tar.gz

?

安装:

tar -zxf lzo-2.06.tar.gz

cd lzo-2.06

./configure --enable-shared?

make

make install

?

安装ant并配置环境变量,这里略过

vi /etc/profile ?

PATH=/usr/local/ant/bin/:$PATH

source /etc/profile

?

编译hadoop lzo jar

下载源码

?

https://github.com/kevinweil/hadoop-lzo

?

解压缩、进入项目目录

略...

编译

# 32位OS

> vi mapred-site.xml <property> <name>mapred.child.env</name> <value>JAVA_LIBRARY_PATH=/opt/hadoop/build/native/Linux-amd64-64</value> </property>

???PS. ?如果上述方式设置的JAVA_LIBRARY_PATH没有生效(通过“ps -ef | grep tasktracker”查看),可能需要通过bin/hadoop设置JAVA_LIBRARY_PATH。

?

?

?

Q & A:

Q:java.lang.RuntimeException: native-lzo library not available

A:原因一:sudo cp /usr/local/lib/*lzo* /usr/lib64/;

? ? ?原因二:%$HADOOP_HOME/lib下有hadoop-gpl-compression-0.1.0-dev.jar,删除它

? ? ?原因三:JAVA_LIBRARY_PATH配置错误。JNI通过这个环境变量查找库文件,通ps -ef | grep tasktracker,查看lzo的lib文件是否在这个环境变量中,要指向 native/Linux-amd64-64/lib文件,而不是?native/Linux-amd64-64文件夹。通过修改$HADOOP_HOME/bin/hadoop可以修改这个环境变量

?

Q:lzo文件是不是生成索引之后才支持自动分片?

A:是的,如果不生成index则lzo文件会被作为一个input split处理。

?

Q: 使用客户端提交job时,报如下错误:

?

java.io.IOException: Codec for file hdfs://BGP-BJ-2-5N1:9000/pub/tencent/20110616/18.log.lzo not found, cannot run

at com.hadoop.mapreduce.LzoLineRecordReader.initialize(LzoLineRecordReader.java:97)

at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.initialize(MapTask.java:451)

at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:646)

at org.apache.hadoop.mapred.MapTask.run(MapTask.java:323)

at org.apache.hadoop.mapred.Child$4.run(Child.java:270)

at java.security.AccessController.doPrivileged(Native Method)

at javax.security.auth.Subject.doAs(Subject.java:396)

at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1127)

at org.apache.hadoop.mapred.Child.main(Child.java:264)

?

A:在代码中,或者配置文件中添加下面配置:

?

?

conf.set("io.compression.codecs", "org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,com.hadoop.compression.lzo.LzopCodec");
conf.set("io.compression.codec.lzo.class", "com.hadoop.compression.lzo.LzoCodec");

?

?

参考文章:

http://share.blog.51cto.com/278008/549393

http://www.tech126.com/hadoop-lzo/

http://www.cloudera.com/blog/2009/11/hadoop-at-twitter-part-1-splittable-lzo-compression/

?

-- end --

?

?

?

读书人网 >软件架构设计

热点推荐