一、阅读编译文档

在hadoop源码包根目录下有个一个BUINDING.txt的文件,文件说明了编译hadoop所需要的一些编译hadoop所需要的一些编译环境相关的东西。不同hadoop版本的要求都不一样。我选择的版本是hadoop-2.7.7

----------------------------------------------------------------------------------
Requirements:

* Unix System
* JDK 1.7+
* Maven 3.0 or later
* Findbugs 1.3.9 (if running findbugs)
* ProtocolBuffer 2.5.0
* CMake 2.6 or newer (if compiling native code), must be 3.0 or newer on Mac
* Zlib devel (if compiling native code)
* openssl devel ( if compiling native hadoop-pipes and to get the best HDFS encryption performance )
* Linux FUSE (Filesystem in Userspace) version 2.6 or above ( if compiling fuse_dfs )
* Internet connection for first build (to fetch all Maven and Hadoop dependencies)

二、软件安装

对应以上需求,准备好所要求版本的这些软件。

当然,以上所需的软件我已经全部准备好了,😶链接:https://pan.baidu.com/s/1Fj-od3HpWQMI0IhvmTUdfQ 提取码:68j6

三、安装JDK

选择版本:jdk1.8.0_201

卸载系统自带的openjdk

[root@localhost ~]# rpm -qa |grep java
python-javapackages-3.4.1-11.el7.noarch
java-1.8.0-openjdk-headless-1.8.0.161-2.b14.el7.x86_64
tzdata-java-2018c-1.el7.noarch
java-1.7.0-openjdk-1.7.0.171-2.6.13.2.el7.x86_64
java-1.8.0-openjdk-1.8.0.161-2.b14.el7.x86_64
javapackages-tools-3.4.1-11.el7.noarch
java-1.7.0-openjdk-headless-1.7.0.171-2.6.13.2.el7.x86_64

忽略依赖卸载查询到的openjdk相关包

rpm -e --nodeps python-javapackages-3.4.1-11.el7.noarch
rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.161-2.b14.el7.x86_64
...

上传自己的jdk解压,并配置环境变量

tar -zxvf jdk-8u201-linux-x64.tar.gz -C /opt/

打开/etc/profile文件添加以下内容

export JAVA_HOME=/opt/jdk1.8.0_201
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

检测是否安装成功

[root@localhost jdk1.8.0_201]# source /etc/profile
[root@localhost jdk1.8.0_201]# java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)

四、安装依赖包

根据编译指导文件BUILDING.txt,安装相关依赖程序包

[root@localhost jdk1.8.0_201]# yum -y install gcc-c++ build-essential autoconf automake libtool cmake zlib1g-dev pkg-config libssl-devua svn openssl-devel ncurses-devel

出现这种情况时需要更换yum源,具体如何更换就不多说了,自行百度。

已加载插件:fastestmirror, langpacks
Loading mirror seeds from cached hostfile
 * base: mirrors.cn99.com
 * extras: mirrors.cn99.com
 * updates: mirrors.nwsuaf.edu.cn
没有可用软件包 build-essential。
没有可用软件包 zlib1g-dev。
没有可用软件包 pkg-config。
没有可用软件包 libssl-devua。
已安装:
  autoconf.noarch 0:2.69-11.el7      automake.noarch 0:1.13.4-3.el7   cmake.x86_64 0:2.8.12.2-2.el7     
  gcc-c++.x86_64 0:4.8.5-36.el7_6.1  libtool.x86_64 0:2.4.2-22.el7_3  subversion.x86_64 0:1.7.14-14.el7 

作为依赖被安装:
  apr.x86_64 0:1.4.8-3.el7_4.1                          apr-util.x86_64 0:1.5.2-6.el7                     
  libstdc++-devel.x86_64 0:4.8.5-36.el7_6.1             m4.x86_64 0:1.4.16-10.el7                         
  perl-Data-Dumper.x86_64 0:2.145-3.el7                 perl-Test-Harness.noarch 0:3.28-3.el7             
  perl-Thread-Queue.noarch 0:3.02-2.el7                 subversion-libs.x86_64 0:1.7.14-14.el7            

作为依赖被升级:
  libstdc++.x86_64 0:4.8.5-36.el7_6.1

五、安装Maven

编译要求:Maven 3.0 or later

安装软件:apache-maven-3.5.4-bin.tar

[root@localhost apps]# ls
apache-maven-3.5.4-bin.tar
[root@localhost apps]# tar -xvf apache-maven-3.5.4-bin.tar -C /opt

配置mvn的环境变量

export M2_HOME=/opt/apache-maven-3.5.4
export PATH=$PATH:$M2_HOME/bin

测试是否安装完成

[root@localhost opt]# source /etc/profile
[root@localhost opt]# mvn -v
Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-18T02:33:14+08:00)
Maven home: /opt/apache-maven-3.5.4
Java version: 18.0_201, vendor: Oracle Corporation, runtime: /opt/jdk1.8.0_201/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-862.el7.x86_64", arch: "amd64", family: "unix"

六、安装Findbugs

编译要求:Findbugs 1.3.9
安装软件:findbugs-3.0.1.tar

[root@localhost apps]# ls
findbugs-3.0.1.tar
[root@localhost apps]# tar -xvf findbugs-3.0.1.tar -C /opt

配置Findbugs环境变量

export FINDBUGS_HOME=/opt/findbugs-3.0.1
export PATH=$PATH:$FINDBUGS_HOME/bin

测试是否安装完成

[root@localhost apps]# source /etc/profile
[root@localhost apps]# findbugs -version
3.0.1

七、安装ProtocolBuffer

编译要求:ProtocolBuffer 2.5.0
安装软件:protobuf-2.5.0.tar,不建议用其它版本

[root@localhost apps]# ls
protobuf-2.5.0.tar
[root@localhost apps]# tar -zxvf protobuf-2.5.0.tar.gz -C /opt
[root@localhost apps]# cd /opt/protobuf-2.5.0/
[root@localhost protobuf-2.5.0]# ./configure 
[root@localhost protobuf-2.5.0]# make -j 4  # 干货,-j以4核同时编译
[root@localhost protobuf-2.5.0]# make install

测试是否安装完成

[root@localhost protobuf-2.5.0]# protoc --version
libprotoc 2.5.0

八、安装Snappy

[root@localhost apps]# ls
snappy-1.1.3.tar.gz

安装

[root@localhost opt]# cd snappy-1.1.3/
[root@localhost snappy-1.1.3]# ./configure
[root@localhost snappy-1.1.3]# make -j 4
[root@localhost snappy-1.1.3]# make install

查看snappy文件库

[root@localhost snappy-1.1.3]# ls -lh /usr/local/lib | grep snappy
-rw-r--r--. 1 root root 510K 4月  12 14:14 libsnappy.a
-rwxr-xr-x. 1 root root  955 4月  12 14:14 libsnappy.la
lrwxrwxrwx. 1 root root   18 4月  12 14:14 libsnappy.so -> libsnappy.so.1.3.0
lrwxrwxrwx. 1 root root   18 4月  12 14:14 libsnappy.so.1 -> libsnappy.so.1.3.0
-rwxr-xr-x. 1 root root 253K 4月  12 14:14 libsnappy.so.1.3.0
[root@localhost snappy-1.1.3]# 

九、开始编译hadoop

[root@localhost apps]# ls
hadoop-2.7.7-src

在编译之前防止java.lang.OutOfMemoryError:Java heap space堆栈问题,在centos系统执行

[root@hadoop1 snappy-1.1.3]# export MAVEN_OPTS="-Xms256m -Xmx512m"

进入源码包下,执行命令进行编译

[root@localhost snappy-1.1.3]# cd /root/apps/hadoop-2.7.7-src/
[root@localhost hadoop-2.7.7-src]# mvn package -Pdist,native,docs -DskipTests -Dtar

如果中途编译失败,并且不要文档的话,请使用这个命令

[root@localhost hadoop-2.7.7-src]# mvn clear package -Pdist,native -DskipTests -Dtar -Dsnappy.lib=/usr/local/lib -Dbundle.snappy -Drequire.openssl

编译成功后hadoop-2.7.7.tar.gz在hadoop-2.7.7-src/hadoop-dist/target目录下

[root@node-1 target]# ls
antrun                    hadoop-2.7.7.tar.gz                 javadoc-bundle-options
classes                   hadoop-dist-2.7.7.jar               maven-archiver
dist-layout-stitching.sh  hadoop-dist-2.7.7-javadoc.jar       maven-shared-archive-resources
dist-tar-stitching.sh     hadoop-dist-2.7.7-sources.jar       test-classes
hadoop-2.7.7              hadoop-dist-2.7.7-test-sources.jar  test-dir