LZO(Lempel Ziv Oberhumer)是致力于解压速度的一种数据压缩算法。
由于Hadoop Lzo实际上依赖C/C++开发的lzo去压缩。Java程序在使用Lzo压缩是通过JNI去调用gplcompression。
如果调取的版本不对会报 native-lzo library not available,这时就需要重新去编译 lzo2 及 gplcompression库文件。
具体的操作步骤如下:
1)下载Lzo、Lzop、hadoop-lzo-master源码包,
其下载地址如下:
lzo、lzop:
http://www.lzop.org/
hadoop-lzo-master:
2)编译lzo-2.09.tar.gz
【64位】
解压
$gzip -dc lzo-2.09.tar.gz | tar -xvf-
$cd lzo-2.09
CFLAGS='-maix64' CPPFLAGS='-maix64' CC='gcc' AR='ar -X64' configure --enable-static -enable-shared --prefix=/usr/local/hadoop/lzo-2.09
设置环境变量export OBJECT_MODE=64,若没有设置,则会报如下错误:
CC examples/dict.oCCLD examples/dict
ld: 0711-317 ERROR: Undefined symbol: .__lzo_align_gap
ld: 0711-317 ERROR: Undefined symbol: .lzo1x_999_compress_level
ld: 0711-317 ERROR: Undefined symbol: .lzo1x_decompress_dict_safe
ld: 0711-317 ERROR: Undefined symbol: .lzo_memcmp
ld: 0711-317 ERROR: Undefined symbol: .lzo_version_string
ld: 0711-317 ERROR: Undefined symbol: .lzo_version_date
ld: 0711-317 ERROR: Undefined symbol: .__lzo_init_v2
ld: 0711-317 ERROR: Undefined symbol: .lzo_adler32
ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information.
collect2: error: ld returned 8 exit status
make: 1254-004 The error code from the last command is 1.
$make
$make install
安装完毕后,将/usr/local/hadoop/lzo-2.09/lib/*复制到 /usr/lib64/下
cp /usr/local/hadoop/lzo-2.09/lib/* /usr/lib64
$cp src/.libs/liblzo2.so.2 /usr/lib64/liblzo2.so.2.0.0
$cd /usr/lib64
$ln -s liblzo2.so.2.0.0 liblzo2.so.2
$ln -s liblzo2.so.2.0.0 liblzo2.so
查看动态库的位数
$nm -X64 liblzo2.so.2.0.0 | wc -l
$nm -X32 liblzo2.so.2.0.0 | wc -l
显然是64位库文件。
配置环境变量(vim /etc/bashrc): export PATH=$PATH:/usr/local/hadoop/lzo-2.09
【32位】
解压
$gzip -dc lzo-2.09.tar.gz | tar -xvf-
$cd lzo-2.09
$configure --enable-static -enable-shared --prefix=/usr/local/hadoop/lzo-2.09
$make
$make install
安装完毕后,将
/usr/local/hadoop/lzo-2.09/lib/*
复制到
/usr/lib/
下
cp /usr/local/hadoop/lzo-2.09/lib/* /usr/lib
3)编译lzop-1.03.tar.gz
【
64
位】
解压
$gzip -dc lzop-1.03.tar.gz | tar -xvf-
$cd lzop-1.03
$export C_INCLUDE_PATH=/usr/local/hadoop/lzo-2.09/include
PS:
如果不配置,则会报错
configure: error: LZO header files not found. Please check your installation or set the environment variable `CPPFLAGS'.
$CFLAGS='-maix64' CPPFLAGS='-maix64' CC='gcc' AR='ar -X64' configure --prefix=/usr/local/hadoop/lzop-1.03
$make
$make install
把lzop链接到/usr/bin
$ln -s /usr/local/hadoop/lzop-1.03/bin/lzop /usr/bin/lzop
以上步骤已经安装好 Lzop 压缩,
成功安装后可直接使用lzop命令对文件进行解压缩操作了。
压缩命令
$lzop 20150919.log
解压命令
$lzop -d -o decompress.log 20150919.log.lzo
【
32
位】
$gzip -dc lzop-1.03.tar.gz | tar -xvf-
$cd lzop-1.03
$export C_INCLUDE_PATH=/usr/local/hadoop/lzo-2.09/include
$configure --prefix=/usr/local/hadoop/lzop-1.03
$make
$make install
把
lzop
链接到
/usr/bin
$ln -s /usr/local/hadoop/lzop-1.03/bin/lzop /usr/bin/lzop
4)编译hadoop-lzo-master.zip源码
由于仅需要动态库和静态库,故仅需要编译
C/C++
部分。
$unzip hadoop-lzo-master.zip
$cd hadoop-lzo-master/src/main/native
$CFLAGS='-maix64' CPPFLAGS='-maix64' CC='gcc' AR='ar -X64' configure
$make
PS:执行make时出错,经过查看源码需要修改以下2点:
[1] 修改 Makefile
将
AM_CFLAGS = -g -Wall -fPIC -O2 -m$(JVM_DATA_MODEL)
修改为
AM_CFLAGS = -g -Wall -fPIC -O2 -maix64
[2] 修改
config.h
hadoop-lzo-master/src/main/native/impl/config.h
第
5
行的
#define HADOOP_LZO_LIBRARY
修改为
#define HADOOP_LZO_LIBRARY "/usr/lib64/liblzo2.so.2"
修改完成后重新执行make,即可
$make install
$cp .libs/libgplcompression.a /usr/lib64
$cp .libs/libgplcompression.la /usr/lib64
$cp .libs/libgplcompression.so.0 /usr/lib64/libgplcompression.so.0.0.0
$cd /usr/lib64
$ln -s libgplcompression.so.0.0.0 libgplcompression.so.0
$ln -s libgplcompression.so.0.0.0 libgplcompression.so
$nm -X64 libgplcompression.so.0.0.0 | wc -l
$nm -X32 libgplcompression.so.0.0.0 | wc -l
【
32
位】
$unzip hadoop-lzo-master.zip
$cd hadoop-lzo-master/src/main/native
$configure
$make
$make install
$cp .libs/libgplcompression.a /usr/lib
$cp .libs/libgplcompression.la /usr/lib
$cp .libs/libgplcompression.so.0 /usr/lib/libgplcompression.so.0.0.0
$cd /usr/lib
$ln -s libgplcompression.so.0.0.0 libgplcompression.so.0
$ln -s libgplcompression.so.0.0.0 libgplcompression.so
Author: wangyw
Company: ffcs
Date: 2015-11-08