编译hadoop,hadoop是用java写的,虽然很多功能都可以完全依靠jvm而不依赖操作系统可以实现,但有些功能必须要依赖操作系统系统来实现,比如(bzip2, lz4, snappy, zlib压缩)
这时就需要对hadoop进行编译,生成本操作系统的native文件。
编译环境
- maven3(配置国内镜像)
- jdk1.8
- hadoop2.7.5
编译
- 安装protobuf,编译hadoop必须
#安装必要编译工具
yum -y install gcc c++ gcc-c++ autoconf automake libtool
#下载protobuf
#https://github.com/google/protobuf/releases
wget https://github.com/google/protobuf/releases/download/v2.5.0/protobuf-2.5.0.tar.gz
#解压
tar xzvf protobuf-xxxx
cd xzvf protobuf-xxx
#编译安装
./configure
make
make install
- 安装其它必要包
yum install -y cmake zlib-devel openssl-devel
- 编译hadoop
#下载源代码
git clone https://github.com/apache/hadoop/archive/rel/release-2.7.5.tar.gz
cd hadoop-xxx
mvn package -Pdist,native -DskipTests -Dtar
编译完成之后
编译生成的文件在hadoop-dist/target/里面
我们输入命令检查下
cd hadoop/bin
./hadoop checknative
Native library checking:
hadoop: true /home/zhaow/hadoop-rel-release-2.7.5/hadoop-dist/target/hadoop-2.7.5/lib/native/libhadoop.so.1.0.0
zlib: true /lib64/libz.so.1
snappy: true /opt/hadoop/lib/native/Linux-amd64-64/libsnappy.so.1
lz4: true revision:99
bzip2: false
openssl: true /lib64/libcrypto.so
下图是编译前后snappy的对比
编译成功后可以使用snappy压缩了。
编译成功后就可以把编译好的hadoop拷贝到其它集群机器上使用,在其它集群机器上并不用再重新编译。