hadoop中经常会使用snappy
和lzo
压缩库。但是官网给定的安装包中是不支持这两种压缩的,需要自己重新编译hadoop源码。
yum -y install gcc gcc-c++ libtool cmake zlib-devel autoconf automake
yum -y install ncurses-devel
yum -y install openssl-devel
此外还需要maven环境,可以参照网上其他教程。
yum install -y snappy snappy-devel
cp /usr/lib64/libsnapp* /usr/local/lib
wget https://github.com/electrum/hadoop-snappy/archive/master.zip
unzip master.zip
cd hadoop-snappy-master/
#编译
mvn package
编译完成之后会在target
目录中生成相关文件,这里我们需要的是hadoop-snappy-0.0.1-SNAPSHOT.tar.gz
文件,解压该文件,将里面的jar和动态库拷贝到集群中。
cd target
tar -xcvf hadoop-snappy-0.0.1-SNAPSHOT.tar.gz
cp hadoop-snappy-0.0.1-SNAPSHOT/lib/native/Linux-amd64-64/lib* $HADOOP_HOME/lib/native/
cp hadoop-snappy-0.0.1-SNAPSHOT/lib/hadoop-snappy-0.0.1-SNAPSHOT.jar $HADOOP_HOME/lib/
hadoop-env.sh增加:
vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HADOOP_HOME/lib/native/:/usr/local/lib/
wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.10.tar.gz
tar zxvf lzo-2.10.tar.gz
export CFLAGS=-64m
./configure --enable-shared --prefix=/usr/local/lzo-2.10
make
make install
wget https://github.com/twitter/hadoop-lzo/archive/release-0.4.20.tar.gz
export CFLAGS=-64m
export CXXFLAGS=-64m
export C_INCLUDE_PATH=/usr/local/lzo-2.10/include
export LIBRARY_PATH=/usr/local/lzo-2.10/lib
mvn clean package -Dmaven.test.skip=true
将target/native/Linux-amd64-64/lib
目录下生成的libgplcompression.*
拷贝到集群各个节点的$HADOOP_HOME/lib/native
目录下
将target目录下生成的hadoop-lzo-0.4.20-SNAPSHOT.jar
分发到集群各个节点的$HADOOP_HOME/share/hadoop/common
目录下
cp target/native/Linux-amd64-64/lib/lib* $HADOOP_HOME/lib/native
cp target/hadoop-lzo-0.4.21-SNAPSHOT.jar $HADOOP_HOME/share/hadoop/common
在编译hadoop的时候需要用到protoc
命令,所以在编译hadoop源码之前,先安装protobuf。安装步骤如下:
wget https://github.com/google/protobuf/archive/v2.5.0.zip
# 用root用户执行以下命令
unzip protobuf-2.5.0.zip
cd protobuf-2.5.0/
注意:autogen.sh需要gtest包,默认是从 googletest.googlecode.com
,没有翻墙的话,在执行autogen.sh
的时候会运行失败。可以通过如下修改来解决这个问题。
修改一下autogen.sh
,将这段:
echo "Google Test not present. Fetching gtest-1.5.0 from the web..."
curl http://googletest.googlecode.com/files/gtest-1.5.0.tar.bz2 | tar jx
mv gtest-1.5.0 gtest
修改为:
wget https://github.com/google/googletest/archive/release-1.5.0.tar.gz
tar xzvf release-1.5.0.tar.gz
mv googletest-release-1.5.0 gtest
再执行autogen.sh
,这样就不会报错了
./autogen.sh
./configure
make
make check
make install
安装完成之后,可以执行以下版本来检查protobuf是否安装成功
$ protoc --version
libprotoc 2.5.0
wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.6.5/hadoop-2.6.5-src.tar.gz
tar -zxvf hadoop-2.6.5-src.tar.gz
cd hadoop-2.6.5-src/
mvn clean package -DskipTests -Pdist,native -Dtar -Dsnappy.lib=/usr/local/lib -Dbundle.snappy -Dmaven.javadoc.skip=true
执行成功后,会在hadoop-dist/target/
目录中生成我们需要的文件。hadoop-dist/target/hadoop-2.6.5.tar.gz
为新生成的二进制安装包
/hadoop-dist/target/hadoop-2.6.5/lib/native
中包含我们所需要的支持snappy和lzo的hadoop native library,将该目录下所有的文件拷贝到集群中所有的机器$HADOOP_HOME/lib/native
目录中。
在$HADOOP_HOME/etc/hadoop/hadoop-env.sh
中,添加
export LD_LIBRARY_PATH=/usr/local/lzo-2.10/lib
在$HADOOP_HOME/etc/hadoop/core-site.xml中,添加
<property>
<name>io.compression.codecs</name>
<value>
org.apache.hadoop.io.compress.GzipCodec,
org.apache.hadoop.io.compress.DefaultCodec,
com.hadoop.compression.lzo.LzoCodec,
com.hadoop.compression.lzo.LzopCodec,
org.apache.hadoop.io.compress.BZip2Codec,
org.apache.hadoop.io.compress.SnappyCodec
</value>
</property>
重新启动集群后,即可使用LZO进行数据的压缩操作。
执行hadoop checknative
查看snappy和lzo是否已编译成功。
hadoop checknative
结果如下:
ok,大功告成!
喜欢本文的朋友们,欢迎长按下图关注订阅号DigNew,收看更多精彩内容