Hadoop3.x源碼編譯打包實(shí)驗(yàn)記錄

學(xué)會(huì)編譯Hadoop非常有必要,Hadoop是使用Java語言開發(fā)的,但是有一些需求和操作并不適合使用java,所以就引入了本地庫(Native Libraries) 的概念。說白了,就是Hadoop的某些功能,必須通過JNT來協(xié)調(diào)Java類文件和Native代碼生成的庫文件一起才能工作。linux系統(tǒng)要運(yùn)行Native 代碼,首先要將Native 編譯成目標(biāo)CPU 架構(gòu)的[.so]文件。而不同的處理器架構(gòu),需要編譯出相應(yīng)平臺(tái)的動(dòng)態(tài)庫[.so] 文件,才能被正確的執(zhí)行,所以最好重新編譯一次hadoop源碼,讓[.so]文件與自己處理器相對(duì)應(yīng)。

首先我們需要一臺(tái)和生產(chǎn)運(yùn)行集群架構(gòu)一致的操作系統(tǒng),比如Linux CentOS7.5 X86,從云廠商或者虛擬機(jī)自行搭建都可以。然后我們需要提前從網(wǎng)上下載好如下軟件包,供后面步驟使用。

  • cmake-3.24.2.tar.gz(需要源碼包,否則沒有configure文件,為了安裝后面的snappy和protobuf使用)
  • snappy-1.1.3.tar.gz(二進(jìn)制包,否則沒有configure文件,hadoop進(jìn)行壓縮解壓縮需要用到)
  • protobuf-all-21.9.tar.gz(二進(jìn)制包,否則沒有configure文件,是一個(gè)數(shù)據(jù)序列化工具)
  • jdk-8u241-linux-x64.tar.gz(Hadoop的執(zhí)行需要JVM)
  • apache-maven-3.8.6-bin.tar.gz(編譯hadoop需要)
  • hadoop-3.3.0-src.tar.gz

然后第一步,我們登錄服務(wù)器,并進(jìn)入到/root/soft目錄下,首先安裝編譯需要的相關(guān)依賴:

yum install gcc gcc-c++ make autoconf automake libtool curl lzo-devel zlib-devel openssl openssl-devel ncurses-devel snappy snappy-devel bzip2 bzip2-devel lzo lzo-devel lzop libXtst zlib -y
...
Complete!
yum install -y doxygen cyrus-sasl* saslwrapper-devel*
...
Complete!

第二步,手動(dòng)安裝cmake:

#yum卸載已安裝cmake,一般版本較低,無論是否安裝都卸載一下
yum erase cmake

# 解壓
tar zxvf cmake-3.24.2.tar.gz

#進(jìn)入到目錄內(nèi)進(jìn)行編譯安裝
cd cmake-3.24.2
./configure
make && make install

#驗(yàn)證
[root@iZuf6gmsvearrd5uc3emkyZ cmake-3.24.2]# cmake -version
cmake version 3.24.2

CMake suite maintained and supported by Kitware (kitware.com/cmake).

第三步,安裝snappy:

#卸載已經(jīng)安裝的
rm -rf /usr/local/lib/libsnappy*
rm -rf /lib64/libsnappy*

#解壓
tar zxvf snappy-1.1.3.tar.gz 

#進(jìn)入到目錄內(nèi)進(jìn)行編譯安裝
cd snappy-1.1.3
./configure
make && make install

#驗(yàn)證
[root@iZuf6gmsvearrd5uc3emkyZ snappy-1.1.3]# ls -lh /usr/local/lib | grep snappy
-rw-r--r-- 1 root root 511K Nov  1 17:12 libsnappy.a
-rwxr-xr-x 1 root root  955 Nov  1 17:12 libsnappy.la
lrwxrwxrwx 1 root root   18 Nov  1 17:12 libsnappy.so -> libsnappy.so.1.3.0
lrwxrwxrwx 1 root root   18 Nov  1 17:12 libsnappy.so.1 -> libsnappy.so.1.3.0
-rwxr-xr-x 1 root root 253K Nov  1 17:12 libsnappy.so.1.3.0

第四步,安裝protobuf:

#解壓
tar zxvf protobuf-all-21.9.tar.gz

#進(jìn)入到目錄內(nèi)進(jìn)行編譯安裝
cd protobuf-all-21.9
./autogen.sh
./configure
make && make install

#驗(yàn)證
[root@iZuf6gmsvearrd5uc3emkyZ protobuf-21.9]# protoc --version
libprotoc 3.21.9

第五步,安裝和配置JDK:

#解壓
tar zxvf jdk-8u65-linux-x64.tar.gz

#配置環(huán)境變量
vim /etc/profile
export JAVA_HOME=/root/soft/jdk1.8.0_241
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
source /etc/profile

#驗(yàn)證
[root@iZuf6gmsvearrd5uc3emkyZ soft]# java -version
java version "1.8.0_241"
Java(TM) SE Runtime Environment (build 1.8.0_241-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.241-b07, mixed mode)

第六步,安裝和配置Maven:

#解壓
tar zxvf apache-maven-3.8.6-bin.tar.gz

#配置環(huán)境變量
vim /etc/profile
export MAVEN_HOME=/root/soft/apache-maven-3.8.6
export PATH=:$MAVEN_HOME/bin:$PATH
source /etc/profile

#驗(yàn)證
[root@iZuf6gmsvearrd5uc3emkyZ soft]# mvn -v
Apache Maven 3.8.6 (84538c9988a25aec085021c365c560670ad80f63)
Maven home: /root/soft/apache-maven-3.8.6
Java version: 1.8.0_241, vendor: Oracle Corporation, runtime: /root/soft/jdk1.8.0_241/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-862.14.4.el7.x86_64", arch: "amd64", family: "unix"

#修改鏡像倉庫為國內(nèi)地址
vim /root/soft/apache-maven-3.8.6/conf/settings.xml

<mirrors>
     <mirror>
           <id>alimaven</id>
           <name>aliyun maven</name>
           <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
           <mirrorOf>central</mirrorOf>
      </mirror>
</mirrors>

第七步,編譯hadoop:

#解壓
tar zxvf hadoop-3.3.0-src.tar.gz

#進(jìn)入到目錄內(nèi)進(jìn)行maven編譯打包
cd hadoop-3.3.0-src
mvn clean package -Pdist,native -DskipTests -Dmaven.javadoc.skip=true -Dtar -Dbundle.snappy -Dsnappy.lib=/usr/local/lib

#參數(shù)說明
#Pdist,native :重新編譯生成的hadoop動(dòng)態(tài)庫;
#DskipTests :跳過測試
#-Dmaven.javadoc.skip=true : 跳過javadoc
#Dtar :最后把文件以tar打包
#Dbundle.snappy :添加snappy壓縮支持【默認(rèn)官網(wǎng)下載的是不支持的】
#Dsnappy.lib=/usr/local/lib :指定snappy在本機(jī)編譯機(jī)器上安裝的庫路徑

#最終編譯打包后的目標(biāo)文件位于當(dāng)前目錄的target下面,

很可惜,進(jìn)行到這里hadoop-common總是報(bào)錯(cuò)執(zhí)行不下去了,網(wǎng)上搜索很久都沒有找到對(duì)應(yīng)的解決方案,暫且擱置了。

其實(shí)學(xué)會(huì)編譯Hadoop也不是必須的,官網(wǎng)提供的二進(jìn)制包實(shí)驗(yàn)下來也是可以直接使用的,因此本文的編譯工作就不是作為學(xué)習(xí)Hadoop必須的步驟了,后續(xù)有機(jī)會(huì)再研究如何正確編譯。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容