本次编译 ambari 2.7.6 没有使用科学上网的工具,使用的普通网络,可以编译成功,过程比 ambari 2.7.5 编译时要顺畅。
该版本相对 2.7.5 版本以来,共有 26 个 contributors 提交了 114 个 commits 以及修改了 557 个文件。详情见:https://github.com/apache/ambari/compare/release-2.7.5…release-2.7.6
ambari 2.7.6 源码编译与之前版本相比,就编译来说优化了很多地方,主要有:
- 涉及前端模块的 npm 构建都切换为了 yarn 构建。关于 npm vs yarn 可参考:https://zhuanlan.zhihu.com/p/23493436
- 编译 ambari-metrics 模块时,摆脱了 hortonworks 提供的 hbase、hadoop、grafana、phoenix 地址,改为了 apache 提供的地址,能直接下载到。
好了,是不是很期待编译 ambari 2.7.6 ?那我们现在开始吧!~
一、下载 ambari 2.7.6
我们将 ambari 源码包下载到/opt目录下:
cd /opt
# https://github.com/apache/ambari/archive/refs/tags/release-2.7.6.tar.gz 源码包大小:81.4M
# https://www-eu.apache.org/dist/ambari/ambari-2.7.6/apache-ambari-2.7.6-src.tar.gz 源码包大小:85.9M
# https://mirrors.tuna.tsinghua.edu.cn/apache/ambari/ambari-2.7.6/apache-ambari-2.7.6-src.tar.gz 源码包大小:85.9M
wget https://archive.apache.org/dist/ambari/ambari-2.7.6/apache-ambari-2.7.6-src.tar.gz # 源码包大小:85.9M,和www-eu.apache.org、mirrors.tuna.tsinghua.edu.cn网站提供的是一个文件,推荐使用
tar zxvf apache-ambari-2.7.6-src.tar.gz
chown -R root:root apache-ambari-2.7.6-src
二、前置工作
版本说明:
工具 | 版本 |
---|---|
操作系统 | CentOS 7 |
java | 1.8.0_151 |
maven | 3.3.9 |
rpm-build | 4.11.3-43.el7.x86_64 |
gcc-c++ | 4.8.5-39.el7.x86_64 |
python | 2.6(系统自带) |
python-devel | 2.7.5-88.el7.x86_64 |
git | 1.8.3.1 |
1、java 安装
需要下载的依赖安装包,在我的云盘已经保存好了,详情点击下载,链接: https://pan.baidu.com/s/13artwjfgi7ikJiKIBbzb7w 提取码: fgia
1)下载安装包
mkdir /usr/java
cd /usr/java
# 将jdk-8u151-linux-x64.tar.gz拷贝到/usr/java目录下
# 解压
tar zxvf jdk-8u151-linux-x64.tar.gz
# 删除tar包
rm -rf jdk-8u151-linux-x64.tar.gz
2)修改配置文件
vim /etc/profile
# 文末添加如下:
# set java
export JAVA_HOME=/usr/java/jdk1.8.0_151
export PATH=$PATH:$JAVA_HOME/bin
# 保存并退出
:wq!
# 使配置文件生效
source /etc/profile
3)查看版本
java -version
2、maven 安装
1)下载安装包
mkdir /usr/maven
cd /usr/maven
# 将apache-maven-3.3.9-bin.tar.gz拷贝到/usr/maven目录下
# 解压
tar zxvf apache-maven-3.3.9-bin.tar.gz
# 删除tar包
rm -rf apache-maven-3.3.9-bin.tar.gz
2)修改配置文件
vim /etc/profile
# 文末添加如下:
# set mvn
export MAVEN_HOME=/usr/maven/apache-maven-3.3.9
export PATH=$MAVEN_HOME/bin:$PATH
# 保存并退出
:wq!
# 使配置文件生效
source /etc/profile
3)查看版本
mvn -v
3、rpm-build 安装
yum install rpm-build -y
4、gcc-c++ 安装
# centos-7 自带
yum install gcc-c++ -y
5、python-devel 安装
# centos-7 自带
yum install python-devel
6、git 安装
yum install git -y
三、编译 Ambari
1、maven 镜像源配置
编辑 apache-maven-3.3.9/conf/settings.xml 配置文件,添加好下述镜像源,会提高编译ambari的速度。
<mirrors>
<mirror>
<id>alicentral</id>
<name>aliyun maven central</name>
<url>https://maven.aliyun.com/repository/central</url>
<mirrorOf>central,apache.snapshots.https,maven2-repository.dev.java.net,maven2-glassfish-repository.dev.java.net,maven2-repository.atlassian,apache.staging.https,oss.sonatype.org,spring-milestones</mirrorOf>
</mirror>
<mirror>
<id>alipublic</id>
<name>aliyun maven public</name>
<url>https://maven.aliyun.com/repository/public</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>nexus-hortonworks</id>
<name>Nexus hortonworks</name>
<url>https://repo.hortonworks.com/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>HDPReleases</id>
<name>HDP Releases</name>
<url>https://repo.hortonworks.com/content/repositories/releases/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
id
: 唯一标识name
: 名称描述url
: 地址mirrorOf
: 可以理解"为某个仓库(repository)的做镜像",填写的是repostoryId。相当于一个拦截器,它会拦截maven对remote repository的相关请求,把请求里的remote repository地址,重定向到mirror里配置的地址。可选项:central
: 匹配远程中央仓库*
匹配所有的仓库,但这样有个缺点,就是如果该镜像仓库没有所需jar包,则报错external:*
除了本地缓存之后的所有仓库repo,repo1 repo 或者 repo1
。 这里repo指的是repostoryId*,!repo1
除了repo1的所有远程仓库
更多知识可参考:https://www.jianshu.com/p/c4f02c5bdfc7
2、将 HDP 3.0 和 3.1 文件拷贝到源码中上
在 ambari2.7.6.0 源码里面,是缺少 HDP 3.0 和 3.1 相关目录的,缺失的话,会导致 ambari 在界面部署 hdp 集群时,出现如下图的窘况:
解决办法就是: 将 HDP 3.0 和 3.1 目录拷贝到 ambari-server 的源码里面,具体路径:./ambari-server/src/main/resources/stacks/HDP/ 下,这样后面在编译过程中,就会把这俩目录打到ambari-server.rpm包里面了。
HDP 3.0 和 3.1 文件链接: 可备注【ambari】加我好友 create17_ 免费获取。
3、编译命令
编译ambari的话,如果有自定义版本号的要求,可以先给ambari源码打上自己定义的版本号。打版本号其实就是通过mvn命令自动修改pom.xml文件里面的version值,包括子模块。
然后第二步就是通过mvn命令,将ambari各模块源码编译,最终得到各自的rpm包,类似hortonworks官方提供的ambari相关rpm包。
# 给ambari源码打版本号,版本号可自定义
mvn versions:set -DnewVersion=2.7.6.0.199
# 进入ambari-metrics模块
pushd ambari-metrics
# 打版本号
mvn versions:set -DnewVersion=2.7.6.0.199
# 返回到ambari根目录
popd
# 进入ambari-logsearch模块
pushd ambari-logsearch
# 打版本号
mvn versions:set -DnewVersion=2.7.6.0.199
# 返回到ambari根目录
popd
# 进入ambari-infra模块
pushd ambari-infra
# 打版本号
mvn versions:set -DnewVersion=2.7.6.0.199
# 返回到ambari根目录
popd
# 开始编译
mvn -B -X install rpm:rpm -DnewVersion=2.7.6.0.199 -DbuildNumber=5895e4ed6b30a2da8a90fee2403b6cab91d19972 -DskipTests -Dpython.ver="python >= 2.6" -Drat.skip=true
# 建议将上述命令全量复制,需要buildNumber,否则等rpm包安装时,会报buildNumber错误;-Drat.skip=true会跳过license校验。
四、编译技巧
ambari 源码分为多个模块,当某个模块编译失败时,我们想继续从这个模块开始编译,怎么做呢?
举个例子,假如 ambari-web 模块编译报错,只需要在编译命令的末尾添加:-rf :ambari-web
即可。当报错时显示的模块名,会在 mvn 输出的最后一行显示。
五、报错记录
本文列举了 ambari 2.7.6 全部源码编译时的报错记录,关于解决方案可访问:https://mbd.pub/o/bread/mbd-Y5yWmphy
1、Ambari Web 编译失败
2、Ambari Admin View 编译失败
3、Files 视图编译失败
4、Pig 模块编译失败
5、Capacity Scheduler 编译失败
6、WF Manager View 编译失败
7、Ambari Logsearch Web 编译失败
8、Ambari Infra Assembly 编译失败
本文列举了 ambari 2.7.6 全部源码编译时的报错记录,关于解决方案可访问:https://mbd.pub/o/bread/mbd-Y5yWmphy
六、编译包整理
Ambari 视图、ambari-metrics、ambari-logsearch、ambari-solr 都编译成功了。这里想多说一句,对于网络上的一些博客,大部分都是只编译了ambari-server 和 ambari-agent,甚至连 ambari 视图都没有编译到。在这里,我的教程是很全的,大家可以跟着我的教程做。对于 ambari 源码编译,我已经帮助过很多很多人了。
Ambari 源码全部编译完成后,我们需要将 ambari 各模块的编译包汇总起来。以 centos7 为例,我们需要将编译得到的 rpm 包汇总起来:
mkdir /var/www/html/ambari2/
cp -r ./ambari-server/target/rpm/ambari-server/RPMS/x86_64/ambari-server-2.7.6.0-199.x86_64.rpm /var/www/html/ambari2/
cp -r ./ambari-agent/target/rpm/ambari-agent/RPMS/x86_64/ambari-agent-2.7.6.0-199.x86_64.rpm /var/www/html/ambari2/
cp -r ./ambari-metrics/ambari-metrics-assembly/target/rpm/ambari-metrics-collector/RPMS/x86_64/ambari-metrics-collector-2.7.6.0-199.x86_64.rpm /var/www/html/ambari2/
cp -r ./ambari-metrics/ambari-metrics-assembly/target/rpm/ambari-metrics-hadoop-sink/RPMS/x86_64/ambari-metrics-hadoop-sink-2.7.6.0-199.x86_64.rpm /var/www/html/ambari2/
cp -r ./ambari-metrics/ambari-metrics-assembly/target/rpm/ambari-metrics-grafana/RPMS/x86_64/ambari-metrics-grafana-2.7.6.0-199.x86_64.rpm /var/www/html/ambari2/
cp -r ./ambari-metrics/ambari-metrics-assembly/target/rpm/ambari-metrics-monitor/RPMS/x86_64/ambari-metrics-monitor-2.7.6.0-199.x86_64.rpm /var/www/html/ambari2/
cp -r ./ambari-metrics/ambari-metrics-common/target/rpm/ambari-metrics-common/RPMS/noarch/ambari-metrics-common-2.7.6.0-199.noarch.rpm /var/www/html/ambari2/
cp -r ./ambari-infra/ambari-infra-assembly/target/rpm/ambari-infra-solr/RPMS/noarch/ambari-infra-solr-2.7.6.0-199.noarch.rpm /var/www/html/ambari2/
cp -r ./ambari-infra/ambari-infra-assembly/target/rpm/ambari-infra-solr-client/RPMS/noarch/ambari-infra-solr-client-2.7.6.0-199.noarch.rpm /var/www/html/ambari2/
cp -r ./ambari-infra/ambari-infra-assembly/target/rpm/ambari-infra-manager/RPMS/noarch/ambari-infra-manager-2.7.6.0-199.noarch.rpm /var/www/html/ambari2/
cp -r ./ambari-logsearch/ambari-logsearch-assembly/target/rpm/ambari-logsearch-portal/RPMS/noarch/ambari-logsearch-portal-2.7.6.0-199.noarch.rpm /var/www/html/ambari2/
cp -r ./ambari-logsearch/ambari-logsearch-assembly/target/rpm/ambari-logsearch-logfeeder/RPMS/noarch/ambari-logsearch-logfeeder-2.7.6.0-199.noarch.rpm /var/www/html/ambari2/
如下图所示:
接下来就可以将这些 rpm 包制作为 yum 本地源了。
笔记为 Ambari 2.7.6 全部源码编译保姆级教程,记录了编译过程中所有的报错及解决方案,过程非常详细,是不可多得的好教程。