[主启动类] — 执行逻辑梳理
# 一、主类入口
Collector 最终的 Java 启动点是 AMSApplicationServer.main():
public static void main(String[] args) {
launchAMSApplicationServer(args);
}
1
2
3
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
可以看到,它分为两步:
- init(conf) → 完成配置加载与服务初始化
- start() → 启动 Web 层并挂载控制器
# 三、init 阶段:配置与存储初始化
init()
方法来自父类 AbstractService
在这里会回调子类的 serviceInit 方法:
在 serviceInit 中,会调用 createTimelineMetricStore(),生成存储层服务对象:
new HBaseTimelineMetricsService();
1
该类同样继承自 AbstractService,主要负责:
- 校验 HBase 环境可用性
- 初始化 METRIC_* 系列表模型
- 为 Collector 提供持久化存储能力
init阶段结束标志
此步执行完成后,init()
阶段结束。
# 四、start 阶段:Web 层启动
紧接着调用 start(),会进入 Web 容器的加载过程:
最后责任落在 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
2
3
4
5
6
7
8
9
10
11
12
13
下一节预告
HBaseTimelineMetricsService 初始化时具体建了哪些表? 这些表字段与监控指标的关系是什么? 我们将在后续章节陆续讲解
- 01
- [/metrics/metadata] — 元数据查询和使用 GET09-12
- 02
- [/metrics/metadata] — 请求完整链路解读09-12
- 03
- [/metrics/metadata] — 缓存数据装载 Phoenix09-12