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

JaneTTR

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

  • Bigtop 方法论

  • 自定义集成

  • Ambari Server 与 Web

  • Ambari Metrics

    • 试读&介绍

    • Ambari-Metrics解读【简写AMS】

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

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

      • AMS-Collector-元数据-接口实战

      • AMS-Collector-指标查询-接口实战

      • AMS-Collector-普通指标写入-接口实战

      • AMS-Collector-聚合指标写入-接口实战

  • Ambari Plus 思考

  • Redis集成实战

  • 通用代码模板

  • 各组件代码

  • 技术专题
  • Ambari Metrics
  • Ambari-Metrics解读【简写AMS】
  • AMS-Collector剖析
JaneTTR
2025-09-02
目录
一、主类入口
二、launchAMSApplicationServer 逻辑
三、init 阶段:配置与存储初始化
四、start 阶段:Web 层启动
五、完整执行链路

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

# 一、主类入口

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-Metrics#源码解析#Ambari
启动脚本链接Python&Java
[主启动类] — AMSApplication初始化职责

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

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