[大牛翻译系列]Hadoop(20)附录A.10 压缩格式LZOP编译安装配置

附录A.10 LZOP

LZOP是一种压缩解码器,在MapReduce中可以支持可分块的压缩。第5章中有一节介绍了如何应用LZOP。在这一节中,将介绍如何编译LZOP,在集群做相应配置。

 

A.10.1 获得更多的信息

 

表A.12 有用的资源

描述 URL地址
Twitter有关于LZOP的博客文章,包括一些统计信息和安装指南 http://bit.ly/dfEvGn
Todd Lipcon的LZO GitHub库。  https://github.com/toddlipcon/hadoop-lzo

 

A.10.2 编译LZOP

在具体步骤之前,需要注意一下几点:

  • LZOP的编译环境及硬件最好能够和最终部署的生产环境一致。
  • 在每个需要使用LZOP的节点上都需要分别进行安装和配置,包括集群的数据节点。

 

在CDH发行版上安装Hadoop本地库

在Hadoop中运行LZOP依赖于本地库。首先需要设置本地库。这件事在CDH版本中很容易。脚本如下:

 

$ yum install hadoop-0.20-native.x86_64

 

以下是安装的结果:

 

$ rpm -ql hadoop-0.20-native-0.20.2+923.97-1
/usr/lib/hadoop-0.20/lib/native
/usr/lib/hadoop-0.20/lib/native/Linux-amd64-64
/usr/lib/hadoop-0.20/lib/native/Linux-amd64-64/libhadoop.a
/usr/lib/hadoop-0.20/lib/native/Linux-amd64-64/libhadoop.la
/usr/lib/hadoop-0.20/lib/native/Linux-amd64-64/libhadoop.so
/usr/lib/hadoop-0.20/lib/native/Linux-amd64-64/libhadoop.so.1
/usr/lib/hadoop-0.20/lib/native/Linux-amd64-64/libhadoop.so.1.0.0
/usr/lib/hadoop-0.20/lib/native/Linux-amd64-64/libsnappy.a
/usr/lib/hadoop-0.20/lib/native/Linux-amd64-64/libsnappy.la
/usr/lib/hadoop-0.20/lib/native/Linux-amd64-64/libsnappy.so
/usr/lib/hadoop-0.20/lib/native/Linux-amd64-64/libsnappy.so.1
/usr/lib/hadoop-0.20/lib/native/Linux-amd64-64/libsnappy.so.1.1.1

 

在非CDN发行版上安装Hadoop本地库

如果用的是Apache的Hadoop发行版,它已经自带了Linux 32位和64位的本地库。文件位于$HADOOP_HOME/lib/native。对于其它的Hadoop发行版,请咨询供应商如何安装Hadoop本地库。也可以自行通过官方文档编译本地库。文档位于http://hadoop.apache.org/common/docs/r1.0.0/native_libraries.html

安装LZOP本地库

使用LZOP必须安装LZOP本地库。在RedHat上,脚本如下:

 

$ yum install liblzo-devel

 

在CentOS上,必须从http://pkgs.repoforge.org/lzo/下载和操作系统版本架构匹配的lzo-devel的RPM包。

 

在Hadoop中编译,安装,配置LZOP库

有两个GitHub库维护LZOP库。Todd Lipcon维护一个基于CDH发行版的,在https://github.com/toddlipcon/hadoop-lzo。Twitter维护另一个,在https://github.com/kevinweil/hadoop-lzo。如果需要最新和最好的,用Twitter的那个版本。如果要在CDH发行版上应用,那么就需要Todd的那个版本。

源代码中包含了LZOP的本地库和JAVA库。在下载并解压缩tarball包之后,到相应的目录中编译代码可得到本地库和JAVA库。脚本如下:

 

$ ant package

 

在完成以后,将生成的库文件复制到Hadoop的库目录中。脚本如下:

 

# replace the following path with your actual
# Hadoop installation directory
#
# the following is the CDH Hadoop home dir
#
export HADOOP_HOME=/usr/lib/hadoop
$ cp ./build/hadoop-lzo-<version>.jar $HADOOP_HOME/lib/
$ cp -R build/hadoop-lzo-<version>/lib/native/* \
$HADOOP_HOME/lib/native/

 

配置Hadoop

下一步,需要配置Hadoop的内核,以加入对新的压缩编码器的支持。将一下行加入到core-site.xml中。CDH中core-site.xml的位置是/etc/hadoop/conf/core-site.xml。确保移出了其中的空行和空格。注意,在逗号之间没有白色字符。

其中,io.compression.codecs的值假定Snappy压缩编码器已经安装了。如果不是,那么就需要将org.apache.hadoop.io.compress.SnappyCodec删除。

<property>
    <name>mapred.compress.map.output</name>
    <value>true</value>
</property>
<property>
    <name>mapred.map.output.compression.codec</name>
    <value>com.hadoop.compression.lzo.LzoCodec</value>
</property>
<property>
    <name>io.compression.codecs</name>
    <value>org.apache.hadoop.io.compress.GzipCodec,
    org.apache.hadoop.io.compress.DefaultCodec,
    org.apache.hadoop.io.compress.BZip2Codec,
    com.hadoop.compression.lzo.LzoCodec,
    com.hadoop.compression.lzo.LzopCodec,
    org.apache.hadoop.io.compress.SnappyCodec</value>
</property>
<property>
    <name>io.compression.codec.lzo.class</name>
    <value>com.hadoop.compression.lzo.LzoCodec</value>
</property>

 

CDH发行版中/usr/lib/hadoop/bin/hadoop可以自动添加本地库目录到JVM的java.library.path中。但是,如果客户端的Hadoop代码不是用那个脚本运行的话,那么就需要手动添加以下脚本到JAVA的命令行中。注意引号和/usr之间没有空白字符。

 

-Djava.library.path=/usr/lib/hadoop/lib/native/Linux-amd64-64:/usr/lib64

 

然后bin/run.sh脚本就可以运行Hadoop脚本。它会将本地库目录加入到java.library.path中。

posted @ 2014-03-23 06:26  高翔DC  阅读(1291)  评论(0编辑  收藏  举报