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)
  • 方法论

  • 代码生命周期-metainfo

  • 架构剖析

    • server与agent协作详解[一]
    • server与agent协作详解[二]
    • ambari install逻辑详解[一]
    • ambari install逻辑详解[二]
    • ambari install逻辑详解[三]
    • stack-hooks逻辑详解[一]
    • stack-hooks逻辑详解[二]
      • 4. 最佳实践与技巧 💡
      • 5. 总结与延伸学习 🚀
        • 5.1 内容回顾
        • 5.2 hooks 执行链路结构图
    • distro-select逻辑详解
    • java 请求过程解读[一]
    • java 请求过程解读[二]
    • java 请求过程解读[三]
    • java 请求过程泛化及补充[一]
    • java 请求过程泛化及补充[二]
  • UI样式

  • GOD-Ambari
  • 架构剖析
JaneTTR
2025-06-03
目录

stack-hooks逻辑详解[二]

# 3.2.3 自定义钩子解读

Ambari 安装流程可拆分为安装前、安装中(主过程)、安装后三大阶段。在每个阶段,Ambari 都允许通过调用钩子(Hooks)脚本实现自定义逻辑,既保证了基础流程的可靠,又为高级运维、特定业务场景提供了可插拔的灵活性。

# 3.2.3.1 安装前钩子

安装前钩子,定义在 /var/lib/ambari-agent/cache/stack-hooks/before-INSTALL/scripts/hook.py 的 hook 方法中,是所有安装前自定义任务的 入口点。
它继承自 Hook 基类,并通过 choose_method_to_execute 保证实际被调用的是 hook 方法。

image-20241026192747655

日志中的安装前钩子执行命令:

INFO 2024-10-26 18:14:03,987 CommandHooksOrchestrator.py:128 - ======= Resolved hook script path: /var/lib/ambari-agent/cache/stack-hooks/before-INSTALL/scripts/hook.py, base directory: /var/lib/ambari-agent/cache/stack-hooks/before-INSTALL
/usr/bin/python \
/var/lib/ambari-agent/cache/stack-hooks/before-INSTALL/scripts/hook.py \
INSTALL \
/var/lib/ambari-agent/data/command-409.json \
/var/lib/ambari-agent/cache/stack-hooks/before-INSTALL \
/var/lib/ambari-agent/data/structured-out-409.json \
INFO \
/var/lib/ambari-agent/tmp PROTOCOL_TLSv1_2
1
2
3
4
5
6
7
8
9

提示

典型用途包括:环境准备、依赖包校验、目录与权限检测、预生成通用配置等。只有确保这些前置任务全部完成,后续的主安装逻辑才能被安全触发。


# 3.2.3.2 安装中(主过程)

主安装过程由组件自身脚本负责。例如,Kafka 安装由 /var/lib/ambari-agent/cache/stacks/BIGTOP/3.2.0/services/KAFKA/package/scripts/kafka_broker.py 中的方法实现,包含了所有核心步骤(如包安装、配置写入、服务初始化等)。

日志中的主安装过程执行命令:

INFO 2024-10-26 18:14:03,988 CommandHooksOrchestrator.py:128 - ======= Executing main installation script for Kafka
/usr/bin/python \
/var/lib/ambari-agent/cache/stacks/BIGTOP/3.2.0/services/KAFKA/package/scripts/kafka_broker.py \
INSTALL \
/var/lib/ambari-agent/data/command-409.json \
/var/lib/ambari-agent/cache/stacks/BIGTOP/3.2.0/services/KAFKA/package \
/var/lib/ambari-agent/data/structured-out-409.json \
INFO \
/var/lib/ambari-agent/tmp PROTOCOL_TLSv1_2
1
2
3
4
5
6
7
8
9

笔记

在主脚本内,开发者还可以通过 pre_xxx 和 post_xxx 方法实现自定义组件级钩子,对流程关键点做更细粒度的定制。例如,在 install 前后分别检测特殊资源或做自定义收尾处理。

详细设计可参考 《Ambari实战-041-架构剖析-ambari install逻辑详解》。

# 3.2.3.3 安装后钩子

安装后钩子位于 /var/lib/ambari-agent/cache/stack-hooks/after-INSTALL/scripts/hook.py ,和安装前钩子一样,均通过继承 Hook 基类与调用 hook 方法完成任务。

日志中的安装后钩子执行命令:

INFO 2024-10-26 18:14:03,988 CommandHooksOrchestrator.py:128 - ======= Resolved post-hook script path: /var/lib/ambari-agent/cache/stack-hooks/after-INSTALL/scripts/hook.py
/usr/bin/python \
/var/lib/ambari-agent/cache/stack-hooks/after-INSTALL/scripts/hook.py \
INSTALL \
/var/lib/ambari-agent/data/command-409.json \
/var/lib/ambari-agent/cache/stack-hooks/after-INSTALL \
/var/lib/ambari-agent/data/structured-out-409.json \
INFO \
/var/lib/ambari-agent/tmp PROTOCOL_TLSv1_2
1
2
3
4
5
6
7
8
9

image-20241026193101327

提示

安装后钩子的常见操作:清理临时文件、环境收尾、打版本标记、记录执行日志、自动补全配置,保证安装完成的系统状态符合预期并为后续服务启动提供保障。

# 4. 最佳实践与技巧 💡

根据对系统级与自定义级 hooks 机制的深入理解,推荐如下优化建议:

明确 hooks 的分工

系统级 hooks 用于统一环境/版本/依赖的基础校验,利于全局复用和标准化。 自定义 hooks 适合组件级扩展逻辑或特定业务场景的处理,灵活插拔。

设计建议

组件 Python 文件中的 pre_xxx / post_xxx 应简洁、聚焦于特定需求,避免重复和过度耦合。 注意与主逻辑的协作关系,做到“谁关心谁处理”,防止主流程与钩子职责混乱。

日志驱动调试

在 hooks 和主流程中主动打日志,配合 Agent 端与页面日志双向分析,极大提升排查和优化效率。

系统级

通用 hooks 代码设计应支持多组件共用,例如 before hook 检查 bigtop-select 包,after hook 统一做 distro-select 版本设置等,减少冗余与维护成本。

# 5. 总结与延伸学习 🚀

# 5.1 内容回顾

本章节以流程穿透+源码日志解读为主线,完整还原了 Ambari 系统级与自定义 hooks 的触发原理和实战场景。链路分为三大部分:

  1. 系统级 hooks:

    • 组件安装/启动/升级/停止等主流程前后,自动调用 stack-hooks 目录下的 before/after 脚本,实现环境一致性与必要初始化。
  2. 自定义级 hooks:

    • 组件脚本中 pre_xxx/post_xxx 机制支持灵活扩展,无需更改系统 hooks,也能在局部加特殊处理。
  3. 日志分析与链路可视化:

    • 代码日志驱动,让 hooks 触发、执行顺序、参数传递一目了然,方便持续调优和问题定位。

# 5.2 hooks 执行链路结构图

1. 系统级钩子 - 执行前 Hooks
   │
   ├── /var/lib/ambari-agent/cache/stack-hooks/before-INSTALL/scripts/hook.py
   │
   ├── /var/lib/ambari-agent/cache/stack-hooks/before-INSTALL-KAFKA/scripts/hook.py (如果存在)
   │
   └── /var/lib/ambari-agent/cache/stack-hooks/before-INSTALL-KAFKA-KAFKA_BROKER/scripts/hook.py (如果存在)

↓(进入组件执行)

2. 自定义钩子 - 组件主安装逻辑(kafka_broker.py 中的 INSTALL 逻辑)
   │
   ├── 自定义前置钩子:`pre_xxx`(在主方法前执行,如果定义了)
   │
   └── 主逻辑:/var/lib/ambari-agent/cache/stacks/BIGTOP/3.2.0/services/KAFKA/package/scripts/kafka_broker.py
   │
   └── 自定义后置钩子:`post_xxx`(在主方法后执行,如果定义了)

↓(组件安装完毕,进入后续收尾操作)

3. 系统级钩子 - 执行后 Hooks
   │
   ├── /var/lib/ambari-agent/cache/stack-hooks/after-INSTALL-KAFKA-KAFKA_BROKER/scripts/hook.py (如果存在)
   │
   ├── /var/lib/ambari-agent/cache/stack-hooks/after-INSTALL-KAFKA/scripts/hook.py (如果存在)
   │
   └── /var/lib/ambari-agent/cache/stack-hooks/after-INSTALL/scripts/hook.py
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
26
27
#Ambari#stack-hooks#自定义钩子#自动化运维#源码解析
stack-hooks逻辑详解[一]
distro-select逻辑详解

← stack-hooks逻辑详解[一] distro-select逻辑详解→

最近更新
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
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式