Hadoop LZO的安装与配置
Hadoop支持好几种压缩算法,包括:
Bzip2
Gzip
DEFLATE
Hadoop提供这些算法的Java实现,所以可以很方便的通过FileSystem API来进行文件的压缩和解压缩。这些压缩算法都有一个缺陷,那就是文件不能被分片(splittable)。这就意味着采用这些算法进行压缩的文件需要读取整个文件才能将文件解压缩。这对MapReduce会产生致命的影响,因为这意味着一个压缩文件必须由一个map来处理。这也正是LZO优越之处,LZO压缩的文件是可分片的(这要感谢Hadoop社区的不懈努力)。
LZO的安装与配置步骤如下:
1.从https://github.com/kevinweil/hadoop-lzo下载Hadoop-LZO(注意Hadoop-LZO有两个版本,分别由Cloudera和Twitter维护),一般建议采用Twitter版本。
2.安装lzo和lzo-devel包。在联网情况下可以非常方便的进行安装。
在Red Hat下通过下面的命令:
#yum install liblzo-devel
在Ubuntu下通过下面的命令:
#apt-get install liblzo2-devel
如果是在断网的情况下可以到网站http://www.oberhumer.com/opensource/lzo/下载lzo源码,下载完成后通过下面的命令完成LZO的安装:
#tar -zxf lzo-2.06.tar.gz #cd lzo-2.06 #./configure --enable-shared #make #make install
安装完成后要确保.so文件放在/usr/lib和/usr/lib64文件夹下面(/usr/lib/liblzo2.so /usr/lib64/liblzo2.so)。LZO需要在集群中的每一个节点进行安装。
安装完成后最好把LZOP也安装上,以便在本地使用,LZOP的下载地址: http://www.lzop.org/。
3.编译和安装Hadoop-LZO
首先需要下载和安装apache-ant,这里不再做详细的介绍。然后通过下面的命令进行编译:
32位机器
#export CFLAGS=-m32 #export CXXFLAGS=-m32 #ant compile-native
64位机器
#export CFLAGS=-m64 #export CXXFLAGS=-m64 #ant compile-native tar
在编译过程中需要ivy依赖解析,可以联网活着将依赖包拷到机器上。
4.将编译好的HADOOP-LZO拷贝到Hadoop安装目录下相应的文件夹。在Hadoop-LZO的主目录下执行下面的相关命令:
#cp build/hadoop-lzo*.jar $HADOOP_HOME/lib/ #tar -cBf - -C build/hadoop-lzo-0.4.15/lib/native/ . | tar -xBvf - -C $HADOOP_HOME/lib/native
5.配置Hadoop,在core-site.xml中添加如下内容:
<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
</value>
</property>
<property>
<name>io.compression.codec.lzo.class</name>
<value>com.hadoop.compression.lzo.LzoCodec</value>
</property>
6.测试Hadoop-Lzo是否安装成功
首先在本地压缩一个文件并将该文件put到HDFS:
#lzop 20120229 #hadoop fs -put 20120229.lzo /testdir/
对测试文件进行索引:
#hadoop jar hadoop-lzo-0.4.15.jar com.hadoop.compression.lzo.DistributedLzoIndexer /testdir/20120229.lzo
查看集群上是否有20120229.lzo.index:
#hadoop fs -ls /testdir/
如果索引文件存在则证明安装成功。