TT Bigdata TT Bigdata
首页
  • 部署专题

    • 常规安装
    • 一键部署
  • 组件安装

    • 常规&高可用
  • 版本专题

    • 更新说明
  • Ambari-Env

    • 环境准备
    • 开始使用
  • 组件编译

    • 专区—Ambari
    • 专区—Bigtop
  • 报错解决

    • 专区—Ambari
    • 专区—Bigtop
  • 其他技巧

    • Maven镜像加速
    • Gradle镜像加速
    • Bower镜像加速
    • 虚拟环境思路
    • R环境安装+一键安装脚本
    • Ivy配置私有镜像仓库
    • Node.js 多版本共存方案
    • Ambari Web本地启动
    • Npm镜像加速
    • PostgreSQL快速安装
    • Temurin JDK 23快速安装
  • 成神之路

    • 专区—Ambari
    • 专区—Bigtop
  • 集成案例

    • Redis集成教学
    • Dolphin集成教学
    • Doris集成教学
    • 持续整理...
  • 模板代码

    • 各类组件
    • 通用模板
  • 国产化&其他系统

    • Centos系列
    • Kylin系列
    • OpenEuler系列
    • Rocky系列
    • Ubuntu系列
  • 生产调优

    • 组件调优指南
    • 1v1指导调优
  • 定制开发

    • 组件版本定制
    • 样式风格定制
  • 蓝图愿景
  • 技术支持
  • 合作共建
GitHub (opens new window)

JaneTTR

数据酿造智慧,每一滴都是沉淀!
首页
  • 部署专题

    • 常规安装
    • 一键部署
  • 组件安装

    • 常规&高可用
  • 版本专题

    • 更新说明
  • Ambari-Env

    • 环境准备
    • 开始使用
  • 组件编译

    • 专区—Ambari
    • 专区—Bigtop
  • 报错解决

    • 专区—Ambari
    • 专区—Bigtop
  • 其他技巧

    • Maven镜像加速
    • Gradle镜像加速
    • Bower镜像加速
    • 虚拟环境思路
    • R环境安装+一键安装脚本
    • Ivy配置私有镜像仓库
    • Node.js 多版本共存方案
    • Ambari Web本地启动
    • Npm镜像加速
    • PostgreSQL快速安装
    • Temurin JDK 23快速安装
  • 成神之路

    • 专区—Ambari
    • 专区—Bigtop
  • 集成案例

    • Redis集成教学
    • Dolphin集成教学
    • Doris集成教学
    • 持续整理...
  • 模板代码

    • 各类组件
    • 通用模板
  • 国产化&其他系统

    • Centos系列
    • Kylin系列
    • OpenEuler系列
    • Rocky系列
    • Ubuntu系列
  • 生产调优

    • 组件调优指南
    • 1v1指导调优
  • 定制开发

    • 组件版本定制
    • 样式风格定制
  • 蓝图愿景
  • 技术支持
  • 合作共建
GitHub (opens new window)
  • 准备阶段

  • 理解packages.gradle

    • Bigtop 构建过程中 RPM 打包路径解析
    • Bigtop 如何统一管理各组件版本
    • Bigtop 如何插入补丁
    • Bigtop 应用补丁
    • Bigtop 多版本编译源码改造(一)
      • 背景说明
      • 原始构建逻辑回顾
      • 改造目标与方案设计
      • 修改后的代码逻辑
      • 差异
    • Bigtop 多版本编译源码改造(二)
  • 理解bigtop.bom

  • Hadoop编译

  • Flink编译

  • Spark编译

  • Atlas编译

  • Superset编译

  • Zookeeper编译

  • Hbase编译

  • Hive编译

  • Kafka编译

  • Solr编译

  • Tez编译

  • Zeppelin编译

  • 组件编译-Bigtop
  • 理解packages.gradle
JaneTTR
2022-12-18
目录

Bigtop 多版本编译源码改造(一)1.0.7+

# 背景说明

在使用 Bigtop 构建 RPM 包时,默认的构建逻辑无法很好地支持多版本补丁归档管理。我们希望通过一种更结构化的方式,对源码补丁进行按版本隔离归档,并在构建过程中自动识别和注入。

在不破坏原有构建逻辑的前提下Patch机制 ,增强其兼容性与扩展性,是此次改造的重点。

# 原始构建逻辑回顾

在 packages.gradle 中,源码文件默认会被统一复制到 SOURCES 目录,核心逻辑如下:

copy {
  from fileTree("$BASE_DIR/bigtop-packages/src/common/$NAME") {
    include '**/*'
  }
  into "$PKG_BUILD_DIR/rpm/SOURCES"
}
1
2
3
4
5
6

原始问题

这种统一处理的方式,虽然简洁,但不利于管理多个版本的差异化补丁,版本迭代中容易导致补丁混淆与冲突。

# 改造目标与方案设计

为了更好地支撑如下场景,我们对 packages.gradle 的处理逻辑进行了增强:

需求 描述
多版本隔离 支持按照 BASE_VERSION 将补丁文件归档至子目录
自动注入 在构建时自动识别是否存在版本目录,并注入对应补丁
向下兼容 保留原始路径逻辑,确保未改造组件不受影响

如图所示,改造后的目录结构中,补丁按版本划分:

改造后的效果

# 修改后的代码逻辑

我们在 packages.gradle 中加入如下逻辑:

def baseCommonDir = "$BASE_DIR/bigtop-packages/src/common/$NAME"
def versionCommonDir = "$baseCommonDir/${BASE_VERSION}"
println "Copying common RPM SOURCES from: $baseCommonDir (excluding $BASE_VERSION) to $PKG_BUILD_DIR/rpm/SOURCES"

// 1. 复制根目录通用文件(非版本相关)
copy {
  from fileTree(baseCommonDir) {
    include '**/*'
    exclude "${BASE_VERSION}/**"
  }
  into "$PKG_BUILD_DIR/rpm/SOURCES"
}

// 2. 如果存在版本特定目录,注入版本补丁
if (new File(versionCommonDir).exists()) {
  println "Copying version-specific RPM SOURCES from: $versionCommonDir to $PKG_BUILD_DIR/rpm/SOURCES"
  copy {
    from fileTree(versionCommonDir) {
      include '**/*'
    }
    into "$PKG_BUILD_DIR/rpm/SOURCES"
  }
} else {
  println "No version-specific directory found at: $versionCommonDir"
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

提示

这段逻辑保证了默认行为的稳定性,同时允许我们在特定版本目录中增加补丁内容,从而实现对每个版本的精细化管理。

# 差异

差异如下图所示

构建效果图

#RPM#补丁注入#构建逻辑
Bigtop 应用补丁
Bigtop 多版本编译源码改造(二)

← Bigtop 应用补丁 Bigtop 多版本编译源码改造(二)→

最近更新
01
Pandoc 缺失导致 SparkR 构建失败
06-08
02
Cyrus SASL/GSASL 缺失解决
06-07
03
Hadoop_3.3.4 编译实战 1.0.0+
06-06
更多文章>
Theme by Vdoing | Copyright © 2017-2025 JaneTTR | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式