PparentDir参数解读
在 Bigtop、Ambari 等大数据分发和自动化集成场景下,组件的打包与目录归一化是标准化运维的基础。以如下常见构建命令为例:
gradle redis-rpm -PparentDir=/usr/bigtop -Dbuildwithdeps=true -PpkgSuffix
1
本章聚焦于 -PparentDir
参数背后的逻辑和作用。
# 一、代码层面的参数传递
# 1. 代码实现逻辑
笔记
parentDir 参数在 groovy 构建脚本中的具体传递和拼接逻辑如下图所示。
- 通过
project.hasProperty("parentDir")
判断外部参数是否传入。 - 若存在,则拼接
${BIGTOP_BASE_VERSION}
形成最终的安装前缀。 - 传递到 rpmbuild 时,影响 RPM 包的安装路径。
# 2. 代码片段拆解
def final PARENT_DIR = project.hasProperty("parentDir") ? project.property('parentDir') : "%{nil}"
def FULL_PARENT_DIR = "${PARENT_DIR}"
if (PARENT_DIR != "%{nil}") {
FULL_PARENT_DIR = "${PARENT_DIR}/${BIGTOP_BASE_VERSION}"
}
1
2
3
4
5
2
3
4
5
# 二、为什么要用 parentDir?
目录统一的重要性
如果所有组件默认分布在 /usr/lib
、/usr/bin
等系统目录,后续排查、升级、迁移时会极其混乱。不同项目安装内容无法区分,极易污染系统环境,甚至和系统原生包发生冲突。
最佳实践是让所有自定义大数据包安装在统一前缀下,比如 /usr/bigtop
,类似于 Cloudera 的 /opt/cloudera
、HDP
的 /usr/hdp
。
# 三、HDP/Bigtop 与 Ambari stack_root 设计
# 1. Ambari/Bigtop stack_root 配置示意
笔记
如下图所示,Ambari 的 stack_root 明确指定了 bigtop 根目录,建议与实际编译参数保持一致,否则会带来一系列路径混乱问题。
stack_root 配置位于
ambari-server/src/main/resources/stacks/BIGTOP/3.2.0/configuration/cluster-env.xml
# 2. 目录结构规范
体系 | 目录举例 | 说明 |
---|---|---|
HDP | /usr/hdp/3.1.0.0-78/hadoop | 每个版本独立目录 |
Bigtop | /usr/bigtop/3.2.0/hadoop | 组件全部归一化到 bigtop 根下 |
Current | /usr/bigtop/current/hadoop | 指向实际版本的符号链接 |
# 四、parentDir 实际效果与运维收益
- 统一运维入口:后续查找/排查所有大数据包均在
/usr/bigtop
下,极易定位和批量管理。 - 多版本共存:通过 version 层级,支持不同大版本间平滑切换,无需担心老旧产物遗留。
- 升级/回滚友好:只需更新
current
软链即可实现无感升级或回滚。 - 脚本兼容性强:组件脚本无需关注底层目录变动,只取 current 路径,减少硬编码。
笔记
/usr/bigtop/{version}/{componentName}
→ 版本化产物目录/usr/bigtop/current/{componentName}
→ 指向当前激活版本的软链接
- 01
- bigtop-select 打包缺 compat 报错修复 deb07-16
- 02
- bigtop-select 打包缺 control 文件报错修复 deb07-16
- 03
- 首次编译-环境初始化 必装07-16