Bigtop 中组件代码管理解读
# 1. 背景说明
在 Apache Bigtop 项目中,组件的源码获取、版本管理、构建打包顺序,都依赖一个中心配置文件:bigtop.bom
。
这个文件使用了一种类似 Groovy 的 DSL(领域特定语言)结构,定义了所有参与构建的组件信息、依赖关系、tar 包地址、以及源码来源等,是整个打包体系的入口和“总调度表”。
提示
该文件不仅用于描述组件信息,还能通过解析器驱动自动下载源码、处理依赖顺序、注入构建参数等一系列操作。
# 2. 整体结构一览
bigtop.bom
的结构分为以下几个核心段落:
区块名 | 作用说明 |
---|---|
bigtop | 顶层作用域,包含版本定义、镜像源等全局配置 |
stack | 定义编译环境中 JDK、Scala 等语言依赖 |
apache | 设置 Apache 镜像与归档源 |
components | 所有被管理的组件(如 Hadoop、HBase、Kafka 等) |
dependencies | 定义组件之间的编译依赖关系 |
# 3. 镜像源配置与版本定义
bigtop {
base_version = "3.2.0"
version = base_version + "-SNAPSHOT"
apache {
APACHE_MIRROR = "https://mirrors.huaweicloud.com/apache"
APACHE_ARCHIVE = "https://mirrors.huaweicloud.com/apache"
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
base_version
用于统一控制整个大版本gh_proxy
则用于代理 GitHub 下载(如 Alluxio、Phoenix 等不在 ASF 镜像的组件)APACHE_MIRROR
与ARCHIVE
控制源码下载源地址
# 4. 组件定义:以 Hadoop 为例
每个组件都有独立定义块,用于说明名称、版本、下载链接及打包策略:
'hadoop' {
name = 'hadoop'
version { base = '3.3.4'; pkg = base; release = 1 }
tarball {
destination = "${name}-${version.base}.tar.gz"
source = "${name}-${version.base}-src.tar.gz"
}
url {
download_path = "/$name/common/$name-${version.base}"
site = "${apache.APACHE_MIRROR}/${download_path}"
}
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 可选字段包括:
rpm_pkg_suffix
: 控制打包后 RPM 的版本后缀relNotes
: 组件描述说明packaging
: 指定仅支持rpm
或deb
(如bigtop-select
)
# 5. Git 源代码组件定义(如 Ranger)
对于托管在 GitHub 上的组件,则使用 git
块描述:
'ranger' {
version { base = '2.4.0' }
tarball {
source = "release-${version.base}.tar.gz"
destination = "ranger-${version.base}.tar.gz"
}
url {
site = bigtop.gh_proxy + "https://github.com/apache/ranger/archive/refs/tags"
}
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
如果使用 Git repo,还可以指定:
git {
repo = "https://github.com/apache/ranger.git"
ref = "release-2.4.0"
dir = "${name}-${version.base}-src"
}
1
2
3
4
5
2
3
4
5
# 6. 依赖管理机制
dependencies = [
'bigtop-utils' : ['ambari', 'flink', 'zookeeper'],
'hadoop' : ['hbase', 'hive', 'spark'],
'hbase' : ['phoenix'],
'spark' : ['zeppelin']
]
1
2
3
4
5
6
2
3
4
5
6
这部分告诉构建系统:在构建 hive
前必须先构建 hadoop
,而构建 phoenix
也依赖 hbase
已完成。
# 7. 编译全流程串联图(逻辑)
bigtop.bom → gradle读取bom → 解析 components → 下载源码 → 构建依赖图 → 调用 build.gradle → 构建 RPM/DEB
1