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

JaneTTR

数据酿造智慧,每一滴都是沉淀!
  • Ambari 深度专题

  • Bigtop 方法论

  • 自定义集成

  • Ambari Server 与 Web

    • 方法论

    • 代码生命周期-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样式

  • Ambari Metrics

  • Ambari Plus 思考

  • Redis集成实战

  • 通用代码模板

  • 各组件代码

  • 技术专题
  • Ambari Server 与 Web
  • 架构剖析
JaneTTR
2025-06-03
目录
3.2.3 自定义钩子解读
3.2.3.1 安装前钩子
3.2.3.2 安装中(主过程)
3.2.3.3 安装后钩子
4. 最佳实践与技巧 💡
5. 总结与延伸学习 🚀
5.1 内容回顾
5.2 hooks 执行链路结构图

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逻辑详解[一]
distro-select逻辑详解

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

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