前言
ambari源碼編譯是一個非常痛苦的過程,其官網上的編譯資料非常少。本人在嘗試編譯ambari編碼的過程中,遇到了非常多的問題,特別是ambari-web模塊,吃了不少苦頭。本文介紹的是ambari-2.4.0.0的源碼編譯過程,如果是高版本編譯,可能會少一些問題。編譯環境基本從零構建,我相信本教程應該適用絕大多數用戶。
一、編譯環境準備
1. 安裝必要的編譯工具:
yum install -y gcc make gcc-c++ openssl-devel wget bzip2 rpm-build python-devel
2. 檢查java jdk版本及Python版本
java -version
python -V
jdk 要求1.8版本(1.7版本或許可行,本人沒有嘗試),python版本要求>=2.6並且<3.0,如果默認python版本不是2.6,則要求有可執行文件/usr/bin/python2.6。如果是在Centos 7.5系統上編譯,系統是不帶python 2.6版本的,安裝python 2.6版本:
wget https://www.python.org/ftp/python/2.6.8/Python-2.6.8.tgz
tar -xzvf Python-2.6.8.tgz
cd Python-2.6.8
./configure
make && make altinstall
sudo ln -s /usr/local/bin/python2.6 /usr/bin/python2.6
安裝完成後使用/usr/bin/python2.6 -V命令,檢查安裝是否正確
3. 安裝maven
wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.0/binaries/apache-maven-3.6.0-bin.tar.gz
tar -zxvf apache-maven-3.6.0-bin.tar.gz -C /opt
sudo vim /etc/profile #編輯環境變量,加入以下兩句
export MVN_HOME=/opt/apache-maven-3.6.0
export PATH=${MVN_HOME}/bin:$PATH
source /etc/profile
4. 下載安裝phantomjs-1.9.8(關於ambari-web構建模塊用到的工具都需要特定版本,下面用到的版本都已經過本人驗證):
wget http://cdn.npm.taobao.org/dist/phantomjs/phantomjs-1.9.8-linux-x86_64.tar.bz2
tar -jxvf phantomjs-1.9.8-linux-x86_64.tar.bz2 -C /opt
sudo vim /etc/profile
export PHANTOMJS_HOME=/opt/phantomjs-1.9.8-linux-x86_64
export PATH=${PHANTOMJS_HOME}/bin:$PATH
5. 下載並安裝nodejs-0.10.44版本,nodejs用來編譯ambari-web模塊:
wget https://nodejs.org/download/release/v0.10.44/node-v0.10.44-linux-x64.tar.gz
tar -zxvf node-v0.10.44-linux-x64.tar.gz -C /opt/ #解壓nodejs並放到/opt目錄下
sudo vim /etc/profile #配置環境變量PATH,寫入以下兩行內容
export NODEJS_HOME=/opt/node-v0.10.44-linux-x64/
export PATH=${NODEJS_HOME}/bin:$PATH
source /etc/profile #讓環境變量生效
執行npm -v命令,結果如下圖顯示,表明nodejs安裝成。如果執行不成功,檢查PATH路徑是否配置好。
[ambari@localhost ~]$ npm -v
2.15.0
6. 更換npm倉庫源爲淘寶:
npm config set registry https://registry.npm.taobao.org
7. 安裝brunch-1.8.5版本 (brunch是一個html5構建工具):
npm install -g [email protected]
8. 安裝PhantomJs的依賴庫:yum install libXext libXrender fontconfig libfontconfig.so.1,否則會遇到下面的錯誤提示信息(不影響編譯):
Error verifying phantomjs, continuing { [Error: Command failed: /opt/phantomjs-1.9.8-linux-x86_64/bin/phantomjs: error while loading shared libraries: libfontconfig.so.1: cannot open shared object file: No such file or directory
二、編譯Ambari
1. 下載並解壓ambari 2.4.0版本源碼:
wget http://archive.apache.org/dist/ambari/ambari-2.4.0/apache-ambari-2.4.0-src.tar.gz
tar xfvz apache-ambari-2.4.0-src.tar.gz
2. 修改apache-ambari-
2.4
.
0
-src/
ambari-admin項目下的bower版本定義文件:
vim ambari-admin/src/main/resources/ui/admin-web/package.json
找到該行記錄:"bower": "1.3.8", 將其修改爲 "bower": "1.8.8"。否則會遇到這個錯誤:SyntaxError: Use of const in strict mode。經過本人多次研究,ambari-2.4.0版本,只有該方法有效(注:如果將bower版本改爲1.2.0,不會報這個錯誤,但會報另一個bower版本過時的錯誤)
3. 編輯ambari-metrics/ambari-metrics-storm-sink/pom.xml文件,加入以下內容:
<repositories>
<repository>
<id>central</id>
<name>Central Repository</name>
<url>http://central.maven.org/maven2/</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
修改storm.version屬性爲以下內容:
<properties>
<storm.version>1.1.0</storm.version>
</properties>
4. 編輯ambari/ambari-server/pom.xml文件,修改findBugs版本:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<version>3.0.5</version>
5. 開始編譯:
cd apache-ambari-2.4.0-src
mvn versions:set -DneVersion=2.4.0.0.0
pushd ambari-metrics
mvn versions:set -DnewVersion=2.4.0.0.0
popd
mvn -B clean install package rpm:rpm -DnewVersion=2.4.0.0.0 -DskipTests -Dpython.ver="python >= 2.6"
項目編譯成功所需時間在30分鐘左右: