Centos6 64位编译安装hadoop

预编译的hadoop基本能够满足需求了,之所以自己动手编译安装hadoop也是迫不得已。如果你的系统是Centos6,并且是64位,那么很不幸,运行start-dfs.sh就会有如下提醒,咱们必须自己编译一下hadoop。

一、问题描述

15/11/03 22:50:32 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

请参考官方文档:官方文档 编译README

根据官方文档,运行:

hadoop checknative -a

我们会得到一堆false

Native library checking:
hadoop:  false
zlib:    false
snappy:  false
lz4:     false
bzip2:   false
openssl: false

目前网上的解决方法基本不可用,下边我们通过编译hadoop,得到lib/native/*下文件,来解决这个问题。

二、编译安装

1、下载源代码包,结尾为src.tar.gz文件。

http://www.apache.org/dyn/closer.cgi/hadoop/common/

下载好源代码包后,只需要解压就好了,`tar xvf *.src.tar.gz`.

2、编译安装之前需要完成的工作。

2.1、升级软件包,升级java以及安装’Development Tools’(可选,强烈建议执行)

yum update
yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel -y
yum groupinstall 'Development Tools'

2.2、安装maven(如果已安装可以忽略)
下载并解压缩maven:

wget http://www.us.apache.org/dist/maven/maven-3/3.3.3/binaries/apache-maven-3.3.3-bin.tar.gz
tar zxvf apache-maven-3.3.3-bin.tar.gz

添加到环境变量,将如下语句写入~/.bash_profile

export PATH=/(path)/apache-maven-3.3.3/bin:$PATH

使环境变量生效即可。

source ~/.bash_profile

测试一下效果,如果运行如下命令可以看到版本信息即可。

mvn --version

2.3、安装编译中使用到的其他程序包(至关重要)

yum install openssl openssl-devel zlib zlib-devel snappy snappy-devel lz4 lz4-devel bzip2 bzip2-devel cmake

2.4、安装protobuf2.5.0,这个是比较恶心的,必须是2.5.0否则maven一直报错,此地儿有坑儿。

git clone https://github.com/google/protobuf.git
cd protobuf
git checkout v2.5.0#切换到tag v2.5.0,非常关键

源代码也可以在这里下载:protobuf v2.5.0
编译安装

./configure --prefix=/usr/local
make
make install

添加环境变量,在/etc/profile最后,添加如下内容

#protobuf
export PATH=$PATH:/usr/local/protobuf/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/protobuf/lib

使环境变量生效

source /etc/profile

运行如下命令如果,你看到2.5.0即成功,是其他数字全部不行。

protoc --version

如果上述全部准备妥当,那么下边我们就开始编译了。

3、编译hadoop
进入第1步中解压的hadoop目录,执行如下命令:

mvn package -Pdist,native -DskipTests -Dtar -Dmaven.javadoc.skip=true

请注意最后一个参数-Dmaven.javadoc.skip=true,忽略生成doc文件,主要原因是部分机器配置比较低,可能造成编译报错:无法分配内存。由于我们关注的是native目录下的可执行文件,所以忽略掉doc即可。
如果上述步骤顺利执行完毕,那么所有的都应该是SUCCESS状态,那么我们就可以在如下目录找到我们的native文件了:

hadoop-dist/target/hadoop-2.7.1/lib/native

到此,你有多个选择,可以使用我们自己编译的hadoop也可以使用预编译好的hadoop,如果使用预编译好的hadoop,我们需要将上述native文件夹中的所有文件拷贝到预编译的hadoop的native目录下。
最后验证一下我们的成功,执行命令:

hadoop checknative -a

我们将得到如下结果:

Native library checking:
hadoop:  true /data/Applicaion/hadoop-2.7.1/lib/native/libhadoop.so
zlib:    true /lib64/libz.so.1
snappy:  true /usr/lib64/libsnappy.so.1
lz4:     true revision:99
bzip2:   true /lib64/libbz2.so.1
openssl: true /usr/lib64/libcrypto.so

发表评论

电子邮件地址不会被公开。 必填项已用*标注