该版本相对 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 源码编译与之前版本相比,就编译来说优化了很多地方,主要有:
好了,是不是很期待编译 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 |
需要下载的依赖安装包,在我的云盘已经保存好了,详情点击下载,链接: 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
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
yum install rpm-build -y
# centos-7 自带
yum install gcc-c++ -y
# centos-7 自带
yum install python-devel
yum install git -y
编辑 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
在 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_ 免费获取。
编译 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 输出的最后一行显示。
2、Ambari Admin View 编译失败
3、Files 视图编译失败
4、Pig 模块编译失败
5、Capacity Scheduler 编译失败
6、WF Manager View 编译失败
7、Ambari Logsearch Web 编译失败
8、Ambari Infra Assembly 编译失败
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 资深用户,输出很多技术干货,相关二次开发实战经验丰富,帮助很多人解决疑难问题,录有两门 Ambari 实战课程,学员人数 300+,在圈子里有一定的知名度。