lzo安装说明

来源:互联网 发布:汉王软件 编辑:程序博客网 时间:2024/06/05 10:34

转载地址:http://blog.csdn.net/zhu_xun/article/details/19687171

安装环境说明:

本机系统为centos 6.4 64位版、hadoop版本为0.20.2,在此环境下分别安装lzo(lzo-2.06.tar.gz)和hadoop-lzo(hadoop-lzo-master.zip),另外要确保机器安装了ant。本机是在伪分布式下进行安装的,如果是在全分布式下进行安装,只需要在各个datanode节点分别进行相同的安装就可以了

一、lzo的安装

1.下载lzo-2.06.tar.gz:

http://download.csdn.net/detail/u012875880/6949197

2.解压

tar -zxvf lzo-2.06.tar.gz

3.进入解压后的目录:

cd lzo-2.06

4.编译参数配置:

本例lzo安装在/usr/local/lzo-2.06目录下。

mkdir /usr/local/lzo-2.06 

./configure --enable-shared --prefix=/usr/local/lzo-2.06

5.编译并安装:

make && make install

6.进入lzo的安装目录:

cd /usr/local/lzo-2.06

7.将lib目录下的库文件分别拷贝至/usr/lib64目录以及$HADOOP_HOME/lib/native/Linux-amd64-64/下:

cp lib/* /usr/lib64/

cp lib/* $HADOOP_HOME/lib/native/Linux-amd64-64/

注:(1).如果你的机器是32位系统则将库文件分别拷贝到/usr/lib和$HADOOP_HOME/lib/native/Linux-i386-32目录下。

           可以通过uname -a查看当前系统位数

       (2).lib目录下的库文件将来在使用过程中会被Hadoop(就是Java程序)通过JNI调用(确切的说liblzo*库文件会被后面的libgplcompression*库文件调用,libgplcompression*库文件被才被Java程序直接调用)。

二、hadoop-lzo的安装:

1.下载hadoop-lzo:

可以到http://download.csdn.net/detail/u012875880/6949209进行下载hadoop-lzo-master.zip

2.解压:

unzip hadoop-lzo-master.zip

3.设置环境变量:

vim /etc/profile

export C_INCLUDE_PATH=/usr/local/lzo-2.06/include 
export LIBRARY_PATH=/usr/local/lzo-2.06/lib 

4.编译java工程:

进入压缩目录:

cd hadoop-lzo-master

ant compile-native tar
编译成功后,会在当前目录下生成一个build目录,里面有我们需要的jar文件以及库文件。

注:如果编译过程中出现

[exec] checking lzo/lzo2a.h presence... no
[exec] checking for lzo/lzo2a.h... no
[exec] configure: error: lzo headers were not found...
[exec] gpl-compression library needs lzo to build.
[exec]  Please install the requisite lzo development package.

提示,则说么编译失败,出现这种现象的原因是环境变量没有设置或者设置错误,请参看第3步,设置一下你的环境变量。

如果,编译过程中出现了其他错误情况,请参考官方的FAQ:https://github.com/twitter/hadoop-lzo

5.拷贝生成的build目录下的jar文件到$HADOOP_HOME/lib目录下:

cp build/hadoop-lzo-0.4.15.jar $HADOOP_HOME/lib

6.分别拷贝build目录下的库文件至/usr/lib64目录以及$HADOOP_HOME/lib/native/Linux-amd64-64/下:

cp build/native/Linux-amd64-64/lib/* /usr/lib64

cp build/native/Linux-amd64-64/lib/* $HADOOP_HOME/lib/native/Linux-amd64-64/

注:(1).如果你的机器是32位系统则将库文件分别拷贝到/usr/lib和$HADOOP_HOME/lib/native/Linux-i386-32目录下。

           可以通过uname -a查看当前系统位数

       (2).lib目录下的库文件将来在使用过程中会被Hadoop(就是Java程序)通过JNI直接调用(而该库文件则会去调用步骤一产生的liblzo*库文件)。

7.更改相关配置文件:

(1).core-site.xml文件

   

[html] view plain copy
  1. <property>  
  2.     <name>io.compression.codecs</name>  
  3.              <value>  
  4.                           org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,  
  5.                           com.hadoop.compression.lzo.LzoCodec,com.hadoop.compression.lzo.LzopCodec,org.apache.hadoop.io.compress.BZip2Codec  
  6.             </value>  
  7.    </property>  
  8.   
  9.   <property>  
  10.     <name>io.compression.codec.lzo.class</name>  
  11.     <value>com.hadoop.compression.lzo.LzoCodec</value>  
  12.   </property>  

(2).mapred-site.xml文件:

[html] view plain copy
  1. <property>  
  2.      <name>mapred.output.compress</name>  
  3.      <value>true</value>  
  4.    </property>  
  5.    <property>  
  6.      <name>mapred.output.compression.codec</name>  
  7.      <value>com.hadoop.compression.lzo.LzopCodec</value>  
  8.    </property>  
  9.    <property>  
  10.       <name>mapred.child.env</name>  
  11.       <value>JAVA_LIBRARY_PATH=/home/zhu/hadoop-0.20.2-cdh3u6/lib/native/Linux-amd64-64</value>  
  12.    </property>  


三、lzop安装

1. 下载lzop包:

[root@localhost ~]# wget 'http://www.lzop.org/download/lzop-1.03.tar.gz'

2. 编译安装:

[root@localhost ~]# tar xzvf lzop-1.03.tar.gz 

[root@localhost ~]# cd lzop-1.03

[root@localhost lzop-1.03]# ./configure --prefix=/usr/local/lzop-1.03

[root@localhost lzop-1.03]# make

[root@localhost lzop-1.03]#make install

[root@localhost lzop-1.03]#make clean

3.添加环境变量:

4.测试:

lzop -version


四、常见错误以及额外说明

1.必须保证你的/usr/lib64和$HADOOP_HOME/lib/native/Linux-amd64-64/目录下有如下库文件:

liblzo2.a  liblzo2.la  liblzo2.so  liblzo2.so.2  liblzo2.so.2.0.0

libgplcompression.a   libgplcompression.so    libgplcompression.so.0.0.0
libgplcompression.la  libgplcompression.so.0

如果缺失,会出如下错误提示:

(1)缺失libgplcompersion*库文件:

14/02/21 14:03:49 ERROR lzo.GPLNativeCodeLoader: Could not load native gpl library
java.lang.UnsatisfiedLinkError: no gplcompression in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1738)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1028)
at com.hadoop.compression.lzo.GPLNativeCodeLoader.<clinit>(GPLNativeCodeLoader.java:31)
at com.hadoop.compression.lzo.LzoCodec.<clinit>(LzoCodec.java:60)

(2).有libgplcompersion*库文件但缺失liblzo*库文件:

14/02/21 02:33:04 INFO lzo.GPLNativeCodeLoader: Loaded native gpl library
14/02/21 02:33:04 WARN lzo.LzoCompressor: java.lang.UnsatisfiedLinkError: Cannot load liblzo2.so.2 (liblzo2.so.2: cannot open shared object file: No such file or directory)!

注:注意你的系统的位数及相应的目录。

2.关于hadoop-gpl-compression的说明:

hadoop-lzo-xxx的前身是hadoop-gpl-compression-xxx,之前是放在google code下管理,地址:http://code.google.com/p/hadoop-gpl-compression/ .但由于协议问题后来移植到github上,也就是现在的hadoop-lzo-xxx,github,链接地址:https://github.com/kevinweil/hadoop-lzo.网上介绍hadoop lzo压缩都是基于hadoop-gpl-compression的介绍.而hadoop-gpl-compression还是09年开发的,跟现在hadoop版本已经无法再完全兼容,会发生一些问题。

我安装的hadoop中的lib目录下自带有hadoop-gpl-compression-0.1.0.jar,而我们在上面向$HADOOP_HOME/lib目录下copy过了hadoop-lzo-0.4.15.jar。

这两个jar文件其实是一个东西(如果你查看他们的包结构和api,基本一致),只不过一个是hadoop-gpl-compression对应的老版本的jar,一个是hadoop-lzo对应的新版本的jar。我们必须把他们俩删除一个,我建议删除hadoop-gpl-compression-0.1.0.jar,因为它比较老,和现在的hadoop容易发生不兼容问题。如果不删除,会发生包冲突,hadoop会默认装载使用hadoop-gpl-compression-0.1.0.jar,而我们向$HADOOP_HOME/lib/native/Linux-amd64-64/目录下copy的则是hadoop-lzo对于的库文件(libgplcomperssion*),这样,会发生libgplcomperssion*库文件加载/初始化失败问题,详细错误提示如下:

INFO lzo.GPLNativeCodeLoader: Loaded native gpl library  
14/02/21 02:33:04 WARN lzo.LzoCompressor: java.lang.NoSuchFieldError: workingMemoryBuf  
14/02/21 02:33:04 ERROR lzo.LzoCodec: Failed to load/initialize native-lzo library

3.关于Java程序通过JNI调用库文件说明:

1.hadoop在运行作业时,会先加载libgplcompression.so*文件,然后再加载liblzo2.so*文件(liblzo2.so*文件由libgplcompression.so*文件调用,而libgplcompression.so*则由Java程序直接调用

2.当你以本地模式运行hadoop程序时,所依赖的库文件(libgplcompression.so*、liblzo2.so*)全部从/usr/lib64目录下加载,所以你要保证这些文件都放在此目录下。(如果是32为系统,则放在/usr/lib下)

3.当你以非本地模式运行hadoop程序时,hadoop其实是先从$HADOOP_HOME/lib/native/Linux-amd64-64/目录下加载libgplcompression.so*库文件,然后从/usr/lib64目录下加载liblzo2.so*文件。在上面的安装过程中,之所以要求把libgplcompression.so*文件和liblzo2.so*文件在/usr/lib64和$HADOOP_HOME/lib/native/Linux-amd64-64/目录下分别放一份,是为了尽量避免程序运行时库文件的加载问题(呵呵,宁可错杀千人,也不可使一人漏网)。

注:实际调用库文件路径,由你自己安装路径决定。

原创粉丝点击