TT Bigdata TT Bigdata
首页
  • 部署专题

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

    • 安装教程
    • 魔改分享
  • 版本专题

    • 更新说明
    • BUG临时处理
  • Ambari-Env

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

    • 专区—Ambari
    • 专区—Bigtop-官方组件
    • 专区—Bigtop-扩展组件
  • 报错解决

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

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

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

    • Redis集成教学
    • Dolphin集成教学
    • Doris集成教学
    • 持续整理...
  • 核心代码

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

    • Rocky系列
    • Ubuntu系列
  • Grafana监控方案

    • Ambari-Metrics插件
    • Infinity插件
  • 支持&共建

    • 蓝图愿景
    • 合作共建
登陆
GitHub (opens new window)

JaneTTR

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

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

    • 安装教程
    • 魔改分享
  • 版本专题

    • 更新说明
    • BUG临时处理
  • Ambari-Env

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

    • 专区—Ambari
    • 专区—Bigtop-官方组件
    • 专区—Bigtop-扩展组件
  • 报错解决

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

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

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

    • Redis集成教学
    • Dolphin集成教学
    • Doris集成教学
    • 持续整理...
  • 核心代码

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

    • Rocky系列
    • Ubuntu系列
  • Grafana监控方案

    • Ambari-Metrics插件
    • Infinity插件
  • 支持&共建

    • 蓝图愿景
    • 合作共建
登陆
GitHub (opens new window)
  • 试读&介绍

  • Ambari-Metrics解读【简写AMS】

    • 源码下载及环境初始化
    • 项目目录及模块解读
    • AMS-Collector剖析

      • Ambari启动视角剖析执行逻辑
      • 启动脚本链接Python&Java
      • [主启动类] — 执行逻辑梳理
        • 一、主类入口
        • 二、launchAMSApplicationServer 逻辑
        • 三、init 阶段:配置与存储初始化
        • 四、start 阶段:Web 层启动
        • 五、完整执行链路
      • [主启动类] — AMSApplication初始化职责
      • [主启动类] — HBaseTimeline初始化职责
      • [主启动类] — AMSApplication的Web启动
    • AMS-Collector表结构实战

    • AMS-Collector接口实战

    • AMS-Monitor剖析

  • Metrics2协议解读

  • Hadoop-SINK剖析

  • Hbase-SINK剖析

  • Kafka-SINK剖析

  • 自定义组件接入监控

  • 其他监控方案

  • GOD-Ambari-Metrics
  • Ambari-Metrics解读【简写AMS】
  • AMS-Collector剖析
JaneTTR
2025-09-02
目录

[主启动类] — 执行逻辑梳理

# 一、主类入口

Collector 最终的 Java 启动点是 AMSApplicationServer.main():

public static void main(String[] args) {
  launchAMSApplicationServer(args);
}
1
2
3

这里调用了 launchAMSApplicationServer(),负责整个服务的初始化与启动:

# 二、launchAMSApplicationServer 逻辑

源码核心如下:

static AMSApplicationServer launchAMSApplicationServer(String[] args) {
  Thread.setDefaultUncaughtExceptionHandler(new YarnUncaughtExceptionHandler());
  StringUtils.startupShutdownMessage(AMSApplicationServer.class, args, LOG);
  AMSApplicationServer amsApplicationServer = null;
  try {
    amsApplicationServer = new AMSApplicationServer();
    ShutdownHookManager.get().addShutdownHook(
      new CompositeServiceShutdownHook(amsApplicationServer),
      SHUTDOWN_HOOK_PRIORITY);
    YarnConfiguration conf = new YarnConfiguration();
    amsApplicationServer.init(conf);
    amsApplicationServer.start();
  } catch (Throwable t) {
    LOG.fatal("Error starting AMSApplicationServer", t);
    ExitUtil.terminate(-1, "Error starting AMSApplicationServer");
  }
  return amsApplicationServer;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

可以看到,它分为两步:

  1. init(conf) → 完成配置加载与服务初始化
  2. start() → 启动 Web 层并挂载控制器

# 三、init 阶段:配置与存储初始化

init() 方法来自父类 AbstractService

init 调用 serviceInit

在这里会回调子类的 serviceInit 方法:

AMS serviceInit

在 serviceInit 中,会调用 createTimelineMetricStore(),生成存储层服务对象:

new HBaseTimelineMetricsService();
1

创建 HBaseTimelineMetricsService

该类同样继承自 AbstractService,主要负责:

  • 校验 HBase 环境可用性
  • 初始化 METRIC_* 系列表模型
  • 为 Collector 提供持久化存储能力

HBase 表初始化逻辑

init阶段结束标志

此步执行完成后,init() 阶段结束。

# 四、start 阶段:Web 层启动

紧接着调用 start(),会进入 Web 容器的加载过程:

start 调用 WebApp

最后责任落在 AMSWebApp 上:

  • 启动 Jetty Web 容器
  • 注册 REST API 和 WebSocket 服务
  • 渲染各类 Controller 控制器

start阶段结束标志

至此,Collector 的对外服务能力才算真正完成。

# 五、完整执行链路

我们可以把 AMSApplicationServer 的启动流程总结为四个阶段:

阶段 关键类/方法 作用说明
入口 AMSApplicationServer.main 启动入口,转交给 launch 方法
初始化 AbstractService.init 加载配置,回调 serviceInit
存储初始化 AMSApplicationServer.serviceInit 创建 HBaseTimelineMetricsService,初始化表结构
服务启动 AMSApplicationServer.start 启动 AMSWebApp,加载控制器并对外提供 API

执行顺序图:

sequenceDiagram
    participant Java as AMSApplicationServer
    participant HBase as HBaseTimelineMetricsService
    participant Web as AMSWebApp

    Java ->> Java: main()
    Java ->> Java: launchAMSApplicationServer()
    Java ->> Java: init(conf)
    Java ->> HBase: serviceInit()
    HBase -->> Java: 表结构初始化完成
    Java ->> Java: start()
    Java ->> Web: 启动 Web 容器 & 控制器
    Web -->> Java: API 服务已就绪
1
2
3
4
5
6
7
8
9
10
11
12
13

下一节预告

HBaseTimelineMetricsService 初始化时具体建了哪些表? 这些表字段与监控指标的关系是什么? 我们将在后续章节陆续讲解

#Ambari#Ambari-Metrics#Collector#TimelineService#启动脚本#Java主类
启动脚本链接Python&Java
[主启动类] — AMSApplication初始化职责

← 启动脚本链接Python&Java [主启动类] — AMSApplication初始化职责→

最近更新
01
[/metrics/metadata] — 元数据查询和使用 GET
09-12
02
[/metrics/metadata] — 请求完整链路解读
09-12
03
[/metrics/metadata] — 缓存数据装载 Phoenix
09-12
更多文章>
Theme by Vdoing | Copyright © 2017-2025 JaneTTR | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式