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剖析

    • AMS-Collector表结构实战

    • AMS-Collector接口实战

      • [控制器类] — API请求逻辑梳理
      • [/metrics/metadata] — 元数据查询和使用
      • [/metrics/metadata] — 请求完整链路解读
      • [/metrics/metadata] — 缓存数据装载
        • 一、承接上节:缓存从哪来?
        • 二、核心调用链
          • 1、缓存初始化
          • 2、数据来源:getMetadataFromStore
          • 3、Phoenix 层查询
        • 三、SQL 定义
        • 四、执行逻辑回顾
    • AMS-Monitor剖析

  • Metrics2协议解读

  • Hadoop-SINK剖析

  • Hbase-SINK剖析

  • Kafka-SINK剖析

  • 自定义组件接入监控

  • 其他监控方案

  • GOD-Ambari-Metrics
  • Ambari-Metrics解读【简写AMS】
  • AMS-Collector接口实战
JaneTTR
2025-09-12
目录

[/metrics/metadata] — 缓存数据装载Phoenix

# 一、承接上节:缓存从哪来?

在上一节中,我们已经明确了:
请求 /metrics/metadata 时,数据是直接从 METADATA_CACHE 中返回的。

那么问题来了:METADATA_CACHE 又是何时、如何被填充的?

答案就在 TimelineMetricMetadataManager.initializeMetadata()。

image-20250912112253904

# 二、核心调用链

# 1、缓存初始化

Map<TimelineMetricMetadataKey, TimelineMetricMetadata> metadata = getMetadataFromStore();
METADATA_CACHE.putAll(metadata);
1
2

在 initializeMetadata 中,会调用 getMetadataFromStore(),将查询结果一次性 putAll 到缓存中。

# 2、数据来源:getMetadataFromStore

Map<TimelineMetricMetadataKey, TimelineMetricMetadata> getMetadataFromStore() throws SQLException {
    return hbaseAccessor.getTimelineMetricMetadata();
}
1
2
3

可以看到,真正的查询交给了 PhoenixHBaseAccessor。

# 3、Phoenix 层查询

在 PhoenixHBaseAccessor 中,定义了完整的查询逻辑:

try (PreparedStatement stmt = conn.prepareStatement(GET_METRIC_METADATA_SQL);
     ResultSet rs = stmt.executeQuery()) {

    while (rs.next()) {
        String metricName = rs.getString("METRIC_NAME");
        String appId = rs.getString("APP_ID");
        String instanceId = rs.getString("INSTANCE_ID");

        TimelineMetricMetadata metadata =
            new TimelineMetricMetadata(metricName, appId, instanceId);

        metadata.setUuid(checkForNull(rs.getBytes("UUID")));
        metadata.setUnits(rs.getString("UNITS"));
        metadata.setType(rs.getString("TYPE"));
        metadata.setStartTime(rs.getLong("START_TIME"));
        metadata.setSupportsAggregates(rs.getBoolean("SUPPORTS_AGGREGATION"));
        metadata.setWhitelisted(rs.getBoolean("IS_WHITELISTED"));

        TimelineMetricMetadataKey key =
            new TimelineMetricMetadataKey(metricName, appId, instanceId);
        metadata.setPersisted(true);

        metadataMap.put(key, metadata);
    }
}
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

这里的核心步骤:

  1. 执行 SQL
  2. 遍历 ResultSet
  3. 封装为 TimelineMetricMetadata
  4. 与 Key 组装为 Map,最终返回

# 三、SQL 定义

查询所用的 SQL 定义在 PhoenixTransactSQL 中:

public static final String GET_METRIC_METADATA_SQL =
    "SELECT METRIC_NAME, APP_ID, INSTANCE_ID, UUID, UNITS, TYPE, START_TIME, " +
    "SUPPORTS_AGGREGATION, IS_WHITELISTED FROM METRICS_METADATA_UUID";
1
2
3

提示

数据源就是 METRICS_METADATA_UUID 表。 该表存储了 Collector 内所有监控指标的“元信息”,是 UI 与 API 查询的基础。

# 四、执行逻辑回顾

整个装载过程可归纳为以下四步:

步骤 方法/位置 作用
1️⃣ initializeMetadata 触发缓存加载逻辑
2️⃣ getMetadataFromStore 调用 PhoenixHBaseAccessor
3️⃣ GET_METRIC_METADATA_SQL 查询 HBase 的 METRICS_METADATA_UUID 表
4️⃣ putAll(metadata) 写入 ConcurrentHashMap 缓存
#Ambari#Ambari-Metrics#TimelineService#Collector#Controller#Metadata
[/metrics/metadata] — 请求完整链路解读
待维护-无内容

← [/metrics/metadata] — 请求完整链路解读 待维护-无内容→

最近更新
01
[/metrics/metadata] — 元数据查询和使用 GET
09-12
02
[/metrics/metadata] — 请求完整链路解读
09-12
03
[监控表] — Java代码验证表关系 代码可拷贝运行
09-10
更多文章>
Theme by Vdoing | Copyright © 2017-2025 JaneTTR | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式