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 应用补丁
      • 一、补丁机制的核心逻辑
      • 二、补丁文件的来源与拷贝过程
      • 三、注入 .spec 文件的行为解析
      • 四、patch 实际执行效果
      • 五、补丁源码内容参考
      • 六、流程小结
    • Bigtop 多版本编译源码改造(一)
    • Bigtop 多版本编译源码改造(二)
  • 理解bigtop.bom

  • Hadoop编译

  • Flink编译

  • Spark编译

  • Atlas编译

  • Superset编译

  • Zookeeper编译

  • Hbase编译

  • Hive编译

  • Kafka编译

  • Solr编译

  • Tez编译

  • Zeppelin编译

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

Bigtop 应用补丁

# 一、补丁机制的核心逻辑

Bigtop 在构建各类组件(如 Ranger、Hadoop、Kafka 等)时,通常会为上游源码引入一些补丁(*.diff 文件),这些补丁不需要你手动修改 .spec 文件,也不需要在构建脚本里显式调用。

这一切的核心机制就是——在 .spec 文件中使用如下占位符:

  • #BIGTOP_PATCH_FILES:补丁声明插入位置,如 Patch0: xxx.diff
  • #BIGTOP_PATCH_COMMANDS:补丁执行命令插入位置,如 %patch0 -p1
动态注入 这使得你只需关注补丁本身,Bigtop 会自动完成其余所有集成过程。

# 二、补丁文件的来源与拷贝过程

我们将补丁文件统一放置在如下路径:

bigtop-packages/src/common/<组件名>/
1

Gradle 脚本中通过如下逻辑,将这些文件拷贝到构建目录:

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

构建完成后,在 build/<组件名>/rpm/SOURCES 下即可看到 patch 文件:

补丁拷贝至构建目录

# 三、注入 .spec 文件的行为解析

当 Gradle 执行到 packages.gradle 中的 patch 注入逻辑时,会扫描补丁目录并自动生成如下内容:

spec 注入逻辑

  • #BIGTOP_PATCH_FILES 会被替换为:

    Patch0: patch0-XXX.diff
    Patch1: patch1-YYY.diff
    
    1
    2
  • #BIGTOP_PATCH_COMMANDS 会被替换为:

    %patch0 -p1
    %patch1 -p1
    
    1
    2

实际 .spec 文件构建后如下:

动态写入spec

# 四、patch 实际执行效果

.spec 中的 %patch0 -p1 语法,最终会被构建工具解析成标准 patch 命令,如下所示:

# 实际执行命令
/usr/bin/cat rpm/SOURCES/patch0-RANGER-4201.diff | /usr/bin/patch -p1 --fuzz=0 --verbose
1
2

如需提前验证补丁是否能成功应用,可使用 dry-run 模式:

# 不影响文件,仅验证是否能成功命中
/usr/bin/patch -p1 --fuzz=0 --verbose --dry-run < patch0-RANGER-4201.diff
1
2

执行结果:

patch dry-run 成功

可见,补丁命中了 hbase-agent.xml 的第 54 行,提示 Hunk #1 succeeded at 54.。

推荐验证方式 强烈建议在构建前通过 dry-run 提前测试补丁是否能正确应用,避免 RPM 构建失败。

# 五、补丁源码内容参考

补丁内容通常符合 git diff 标准格式,包含上下文、变更行号、提交作者等信息:

@@ -54,7 +54,6 @@
 <includes>
-<include>com.sun.jersey:jersey-core:jar:${jersey.version}</include>
1
2
3

在构建目录中查看:

patch源码预览

# 六、流程小结

阶段 动作 实现方式
准备补丁 放入 src/common/ranger/*.diff 手动
复制补丁 Gradle 拷贝至 rpm/SOURCES 自动
注入 spec 替换占位符为 PatchN 和 %patchN -p1 自动
执行补丁 构建时自动执行 rpmbuild
验证补丁 使用 dry-run 模式测试 推荐操作

注意

补丁命名需以 patchN- 开头,且放置路径正确,才能被 Bigtop 构建系统正确识别与注入。

#RPM#Patch机制#构建流程
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
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式