[主启动类] — AMSApplication的Web启动
# 一、上节回忆(init 完成了初始化)
提示
- AMSApplicationServer:加载
hbase-site.xml
、ams-site.xml
等配置; - HBaseTimelineMetricsService:初始化 Metadata/Metric Schema/TTL/聚合器/HA/Watcher;
- 现在进入 start():拉起 Web 容器与 API。
# 二、Web 启动入口(模板方法)
# 1、调用关系
- AbstractService.start → 子类实现 startWebApp()
# 2、核心方法(精简版)
protected void startWebApp() {
String addr = metricConfiguration.getWebappAddress();
Configuration conf = metricConfiguration.getMetricsConf();
conf.set(HTTP_MAX_THREADS_KEY,
String.valueOf(metricConfiguration.getTimelineMetricsServiceHandlerThreadCount()));
HttpConfig.Policy policy = HttpConfig.Policy.valueOf(
conf.get(TimelineMetricConfiguration.TIMELINE_SERVICE_HTTP_POLICY, "HTTP_ONLY"));
webApp = WebApps.$for("timeline", null, null, "ws")
.withHttpPolicy(conf, policy)
.at(addr)
.start(new AMSWebApp(timelineMetricStore));
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 3、关键点
- 绑定地址:
getWebappAddress()
(常见host:6188
) - 线程池:
timeline.metrics.service.handler.thread.count
→HTTP_MAX_THREADS_KEY
- 协议策略:
timeline.metrics.service.http.policy
→HTTP_ONLY / HTTPS_ONLY
- 启动链:
WebApps.$for(...).start(new AMSWebApp(...))
常见坑
- 端口被占用;
- HTTP/HTTPS 策略与证书不匹配;
- 线程数设置过小导致排队,过大导致 CPU 抢占。
# 三、AMSWebApp(容器与资源装配)
# 1、角色与位置
- 角色:负责把 TimelineMetricStore 注入 Web 层、注册 REST 资源
- 位置:
ambari-metrics-timelineservice/.../webapp/AMSWebApp.java
# 2、注册流程(片段)
# 3、要点
- 容器通常为 Jetty(由 Hadoop WebApps 打包启动)
- 资源类由 Guice 注入,
TimelineMetricStore
贯穿读写
下一节预告
下节我们给大家详讲解控制器 API /ws/v1/timline/metrics
。
- 01
- [/metrics/metadata] — 元数据查询和使用 GET09-12
- 02
- [/metrics/metadata] — 请求完整链路解读09-12
- 03
- [/metrics/metadata] — 缓存数据装载 Phoenix09-12