TT Bigdata TT Bigdata
首页
GitHub (opens new window)
JaneTTR

JaneTTR

数据酿造智慧,每一滴都是沉淀!
  • 开发环境

  • Ambari 编译

  • Bigtop 编译

  • Ambari 源码编译

  • 前端开发

  • 后端开发

  • 官方组件编译

    • 准备阶段

    • 理解packages.gradle

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

    • Hadoop编译

    • Flink编译

    • Spark编译

    • Livy编译

    • Zeppelin编译

    • Zookeeper编译

    • Hbase编译

    • Hive编译

    • Kafka编译

    • Solr编译

    • Tez编译

  • 扩展组件编译

  • 源码编译
  • 官方组件编译
  • 理解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

提示

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

# 差异

差异如下图所示

构建效果图

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

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

最近更新
01
当前版本 2026/08
08-29
02
把 Ambari Server HA 稳稳地跑起来
08-17
03
从一次启用操作追到主备就绪
08-17
更多文章>
Theme by Vdoing | Copyright © 2017-2026 JaneTTR | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式