一、为什么要源码编译
Hadoop是使用Java语言开发的,但是有一些需求和操作并不适合使用java,所以就引入了本地库(Native Libraries) 的概念。说白了,就是Hadoop的某些功能,必须通过JNT来协调Java类文件和Native代码生成的库文件一起才能工作。linux系统要运行Native 代码,首先要将Native 编译成目标CPU 架构的[.so]文件。而不同的处理器架构,需要编译出相应平台的动态库[.so] 文件,才能被正确的执行,所以最好重新编译一次hadoop源码,让[.so]文件与自己处理器相对应。简单来说就是编译出适合自己机器的Hadoop。
二、编译步骤
1、安装 GCC、autotools、OpenJDK 和 Maven 等开发工具。
yum groupinstall "Development Tools"yum install java-1.8.0-openjdk-devel maven
2、安装协议缓冲区 v3.7.1。
git clone https://github.com/protocolbuffers/protobufcd protobufgit checkout v3.7.1autoreconf -i./configure --prefix=/usr/localmakemake installcd ..
3、安装 CentOS 提供的库。
yum install libtirpc-devel zlib-devel lz4-devel bzip2-devel openssl-devel cyrus-sasl-devel libpmem-devel cmake
4、安装可选依赖项(snappy-devel)。
yum install snappy-devel
5、安装可选依赖项(libzstd-devel)。
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpmyum install libzstd-devel
6、安装可选依赖项(isa-l)。
yum install nasmgit clone https://github.com/intel/isa-lcd isa-l/./autogen.sh./configuremakemake install
7、下载Hadoop的源码包。
Hadoop的源码包可以直接在Hadoop的官网(hadoop.apache.org)下载,如果没有找到自己需要的版本,可以在[Apache归档]下载。下载完之后将其上传到自己的服务器中,然后解压到指定目录。
tar -zxvf hadoop-3.3.2-src.tar.gz -C /export/hadoop
说明:jdk环境如果之前有了,这里就不用装了,没有就装一下,配一下环境变量(使用jdk1.8)
8、安装maven并配置环境变量。
tar -zxvf apache-maven-3.6.3-bin.tar.gz -C /export/maven-3.6.3-tmpcd /export/maven-3.6.3-tmp/apache-maven-3.3.9/conf/vi settings.xml#在第164行的位置配置了阿里云镜像<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf></mirror>
配置maven环境变量
vim /etc/profile.d/env.sh#在打开的文件中添加如下内容export JAVA_HOME=/usr/java/jdk1.8.0_321-amd64export MAVEN_HOME=/export/maven-3.6.3-tmp/apache-maven-3.6.3export PATH=$PATH:$JAVA_HOME/binexport PATH=$PATH:$MAVEN_HOME/bin#保存退出source /etc/profile
说明:配置这两个环境变量即可,其他的不用配置。
9、开始编译。
# 进入到hadoop源码的解压路径下cd /export/hadoop/hadoop-3.3.2-src/# 执行如下命令,开始编译mvn clean package -Pdist,native -DskipTests -Dtar -Dmaven.javadoc.skip=true
说明:编译过程中稍微有点耐心等等,我是32个core的,网络也比较快,所以编译也比较快一点。
10、编译成功。
编译成功会看到如下效果
编译好的Hadoop存在于如下目录中
/export/hadoop/hadoop-3.3.2-src/hadoop-dist/target/
如图