为什么要编译源码?
有时候我们需要更改源码更好的使用,
使用自己的机器编译的源码性能更高
前提
①必备的软件:
apache-ant
apache-maven
protobuf:Protobuf是一种平台无关、语言无关、可扩展且轻便高效的序列化数据结构的协议,可以用于网络通信和数据存储下载地址(github)
源码包
②非必须的软件
findbugs,findbugs官网下载
所有apache软件下载地址:apache所有开源项目的链接
解压重命名环境变量
# 配置Maven
export MAVEN_HOME=/opt/maven
export PATH=$PATH:$MAVEN_HOME/bin
# 配置Maven使用的内存
export MAVEN_OPTS="-Xms1024m -Xmx2048m"
# 配置ant
export ANT_HOME=/opt/ant
export PATH=$PATH:$ANT_HOME/bin
# 配置findbugs
export FIND_BUGS_HOME=/opt/findbugs
export PATH=$PATH:$FIND_BUGS_HOME/bin
#protobuf
export PROTOC_HOME=/opt/protobuf
export PATH=$PROTOC_HOME/bin:$PATH
③需要下载的工具软件
yum -y install gcc*
yum install autoconf automake libtool cmake
yum -y install openssl-devel
yum -y install ncurses-devel
yum install lzo-devel zlib-devel bzip2
yum -y install libs*
yum install fuse-devel
验证安装
[root@hadoop100 opt]# ant -version
Apache Ant(TM) version 1.10.9 compiled on September 27 2020
[root@hadoop100 opt]# mvn -version
Apache Maven 3.8.3 (ff8e977a158738155dc465c6a97ffaf31982d739)
Maven home: /opt/maven
Java version: 1.8.0_131, vendor: Oracle Corporation, runtime: /opt/jdk/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-862.el7.x86_64", arch: "amd64", family: "unix"
[root@hadoop100 opt]# findbugs -version
3.0.1
[root@hadoop100 opt]#
修改maven远程仓库地址(国外的慢!!)
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
编译protobuf并安装
进入protobuf安装目录
生成配置文件(如果下载的是源码的话需要执行,如果下载的是已经生成了配置文件的不需要操作)
./autogen.sh
运行配置脚本,配置一些信息
./configure
编译(过程比较长)
make
安装
make install
验证:
protoc --version
which protoc
编译源码包
我这里没有源码包,所以又下载了一个源码包(src)
解压
[root@hadoop100 opt]# tar -zxvf hadoop-3.3.1-src.tar.gz -C ../
编译
mvn clean package -DskipTests -Pdist,native -Dtar
参数:clean → 清理旧的jar包
package →打包,hadoop源码编译之后的安装包
-DskipTests →跳过测试
-Pdist,native →生成结果目录的后缀dist, native:本地cpu相吻合的.so动态链接库,会将其一并打包到安装包中去
-Dtar → 打包后的目标压缩包的类型,xxx.tar.gz
在源码目录下
[root@hadoop100 hadoop-3.3.1-src]# mvn clean package -DskipTests -Pdist,native -Dtar
出现报错
[ERROR] Failed to execute goal org.apache.hadoop:hadoop-maven-plugins:3.3.1:cmake-compile (cmake-compile) on project hadoop-common: CMake failed with error code 1 -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR] mvn <args> -rf :hadoop-common
也是hadoop3.3.1的经典报错了,就不深究了,直接上解决办法
就是cmake版本太低:yum不行那就自己安装
yum删除已安装的cmake:yum erase cmake
官网下载cmake安装包,手动安装。下载链接:
解压安装包:tar -zxvf cmake-3.13.5.tar.gz -C …/
跳转至cmake目录:cd /opt/cmake
编译: ./configure
安装: make && make install
检验安装是否成功:cmake -version
再次编译经历一个小时的等待终于是搞定了
当然不要忘记包的位置:
结束!