预编译的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
根据官方文档,运行:
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
Be First to Comment