前言
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分钟左右: