一、为什么要源码编译
Hadoop是使用Java语言开发的,但是有一些需求和操作并不适合使用java,所以就引入了本地库(Native Libraries) 的概念。说白了,就是Hadoop的某些功能,必须通过JNT来协调Java类文件和Native代码生成的库文件一起才能工作。linux系统要运行Native 代码,首先要将Native 编译成目标CPU 架构的[.so]文件。而不同的处理器架构,需要编译出相应平台的动态库[.so] 文件,才能被正确的执行,所以最好重新编译一次hadoop源码,让[.so]文件与自己处理器相对应。
简单来说就是编译出适合自己机器的Hadoop。
二、编译步骤
1.安装基础环境
yum install -y wget g++ autoconf automake libtool cmake zlib1g-dev pkg-config openssl-devel gcc-c++ zlib-devel ncurses-devel openssl-devel
2.下载Hadoop的源码包
Hadoop的源码包可以直接在Hadoop的官网(hadoop.apache.org)下载,如果没有找到自己需要的版本,可以在[Apache归档]下载。下载完之后将其上传到自己的服务器中,然后解压到指定目录。
mkdir /home/hadoop
tar -zxvf hadoop-2.6.0-src.tar.gz -C /home/hadoop
3.安装jdk并配置环境变量
解压安装
mkdir /home/java
tar -zxvf jdk-8u181-linux-x64.tar.gz -C /home/java
配置环境变量
vi /root/.bashrc
#在打开的文件中添加如下内容
export JAVA_HOME=/home/java/jdk1.8.0_181
export PATH=$PATH:$JAVA_HOME/bin
#保存并退出
source /root/.bashrc
4.安装maven并配置环境变量
解压安装
mkdir /home/maven
tar -zxvf apache-maven-3.3.9-bin.tar.gz -C /home/maven
配置maven仓库
#在这里我已经提前准备好了相关的仓库将其放在了/home/maven目录下
配置阿里云镜像
cd /home/maven/apache-maven-3.3.9/conf/
vi settings.xml
#在第55行的位置配置了我的仓库
<localRepository>/home/maven/local</localRepository>
#在第164行的位置配置了阿里云镜像
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
#然后保存并推出
配置maven环境变量
vi /root/.bashrc
#在打开的文件中添加如下内容
export JAVA_HOME=/home/java/jdk1.8.0_181
export MAVEN_HOME=/home/maven/apache-maven-3.3.9
export M2_HOME=/home/maven/apache-maven-3.3.9
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin:$M2_HOME/bin
#注意:在这里为了防止编译中遇到maven版本的问题,同时配置了M2的环境变量
#保存并退出
source /root/.bashrc
5.安装protobuf(版本:2.5)并配置环境变量
注意:在这里必须使用protobuf的2.5版本,如果没有找到的话给大家一个连接(https://pan.baidu.com/s/1pJlZubT 百度云)
解压安装
#解压至指定目录
mkdir /home/protobuf
tar -zxvf protobuf-2.5.0.tar.gz -C /home/protobuf
#安装
cd /home/protobuf/protobuf-2.5.0/
./configure --prefix=/home/protobuf/protobuf-2.5.0
make #此命令执行需要等待一定的时间,请不要着急(至少5分钟)
make check #此命令执行需要等待一定的时间,请不要着急
make install #此命令执行需要等待一定的时间,请不要着急
cd bin
./protoc --version #查看protobuf的版本
配置环境变量
vi /root/.bashrc
#在打开的文件中添加如下内容
export PROTOBUF_HOME=/home/protobuf/protobuf-2.5.0
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin:$M2_HOME/bin:$PROTOBUF_HOME/bin
#保存并退出
source /root/.bashrc
5.安装findbugs并配置环境变量
注:findbugs的下载地址 http://findbugs.sourceforge.net/downloads.html
解压安装
#解压至指定目录
mkdir /home/findbugs
tar -zxvf findbugs-3.0.1.tar.gz -C /home/findbugs
配置环境变量
vi /root/.bashrc
#在打开的文件中添加如下内容
export FINDBUGS_HOME=/home/findbugs/findbugs-3.0.1
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin:$M2_HOME/bin:$PROTOBUF_HOME/bin:$FINDBUGS_HOME/bin
#保存并退出
source /root/.bashrc
7.开始编译
# 首先,设置maven可以用内存
export MAVEN_OPTS="-Xms256m -Xmx512m"
# 进入到hadoop源码的解压路径下
cd /home/hadoop/hadoop-2.6.0-src/
# 执行如下命令,开始编译
mvn clean package -Pdist,native -DskipTests -Dtar -Dmaven.javadoc.skip=true
# 如果出现tomcat下载速度过慢
# 将已经准备好的tomcat 直接放入此目录即可
/home/hadoop/hadoop-2.6.0-src/hadoop-common-project/hadoop-kms/downloads/
# 如果第二次出现tomcat下载速度过慢
# 将已经准备好的tomcat 直接放入此目录即可
/home/hadoop/hadoop-2.6.0-src/hadoop-hdfs-project/hadoop-hdfs-httpfs/downloads/
注:编译过程持续时间较长,请大家耐心等待,至少20分钟
8.编译成功
编译成功会看到如下效果
编译好的Hadoop存在于如下目录中
/home/hadoop/hadoop-2.6.0-src/hadoop-dist/target/
如图
注意:配置环境变量时一定注意不要出错,正确的环境变量如下图所示