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

JaneTTR

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

  • Bigtop 方法论

  • 自定义集成

  • Ambari Server 与 Web

  • Ambari Metrics

    • 试读&介绍

    • Ambari-Metrics解读【简写AMS】

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

      • AMS-Collector表结构实战

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

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

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

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

        • [/metrics/aggregated] — 反向分析接口参数
        • [/metrics/aggregated] — 聚合指标触发逻辑溯源
        • [/metrics/aggregated] — 分时日表数据溯源
        • [/metrics/aggregated] — 聚合数据范围
          • 一、背景与结论(时间窗源头交代)
          • 二、调用链路总览(从入口到落点)
            • 1、入口到 CheckpointManager
          • 三、聚合器命名与分区(避免串用检查点)
          • 四、ZK PropertyStore 落点(优先来源)
          • 五、本地 checkpoint 回退(何时会用到)
  • Ambari Plus 思考

  • Redis集成实战

  • 通用代码模板

  • 各组件代码

  • 技术专题
  • Ambari Metrics
  • Ambari-Metrics解读【简写AMS】
  • AMS-Collector-聚合指标写入-接口实战
JaneTTR
2025-09-19
目录
一、背景与结论(时间窗源头交代)
二、调用链路总览(从入口到落点)
1、入口到 CheckpointManager
三、聚合器命名与分区(避免串用检查点)
四、ZK PropertyStore 落点(优先来源)
五、本地 checkpoint 回退(何时会用到)

[/metrics/aggregated] — 聚合数据范围检查点

# 一、背景与结论(时间窗源头交代)

你将获得

  • 聚合时间窗的取值来源;
  • 优先级:ZK PropertyStore 优先,本地文件为回退;
  • 定位方法:如何按聚合器名称在 ZK 中找到对应检查点节点。

入口代码非常直接,所有窗口计算都依赖它的返回值:

long lastCheckPointTime = readLastCheckpointSavingOnFirstRun(currentTime);
1

这句决定“从哪里开始聚”。下面按调用链 → 存储落点 → 回退策略来验证。

# 二、调用链路总览(从入口到落点)

image-20250922200353656

# 1、入口到 CheckpointManager

AbstractTimelineAggregator.readLastCheckpointSavingOnFirstRun()
  └─▶ AbstractTimelineAggregator.readCheckPoint()
      └─▶ CheckpointManager.readCheckpoint(aggregatorName)
          └─▶ CheckpointManager.getCheckpointZKPath(...)
1
2
3
4

关键点

  • aggregatorName 唯一标识一个聚合器(分钟/小时/天、Host/Cluster 等), 因此每类聚合器在 ZK 中都有独立的检查点键,互不干扰。

# 三、聚合器命名与分区(避免串用检查点)

public enum AGGREGATOR_NAME {
  METRIC_RECORD_MINUTE, METRIC_RECORD_HOURLY, METRIC_RECORD_DAILY,
  METRIC_AGGREGATE_SECOND, METRIC_AGGREGATE_MINUTE,
  METRIC_AGGREGATE_HOURLY, METRIC_AGGREGATE_DAILY,
}

static {
  ACTUAL_AGGREGATOR_NAMES.put(METRIC_RECORD_MINUTE, "TimelineMetricHostAggregatorMinute");
  ACTUAL_AGGREGATOR_NAMES.put(METRIC_RECORD_HOURLY, "TimelineMetricHostAggregatorHourly");
  ACTUAL_AGGREGATOR_NAMES.put(METRIC_RECORD_DAILY, "TimelineMetricHostAggregatorDaily");
  ACTUAL_AGGREGATOR_NAMES.put(METRIC_AGGREGATE_SECOND, "TimelineClusterAggregatorSecond");
  ACTUAL_AGGREGATOR_NAMES.put(METRIC_AGGREGATE_MINUTE, "TimelineClusterAggregatorMinute");
  ACTUAL_AGGREGATOR_NAMES.put(METRIC_AGGREGATE_HOURLY, "TimelineClusterAggregatorHourly");
  ACTUAL_AGGREGATOR_NAMES.put(METRIC_AGGREGATE_DAILY, "TimelineClusterAggregatorDaily");

  PARTITION_AGGREGATION_TYPES.put(MetricCollectorHAController.METRIC_AGGREGATORS + "_0",
      TimelineMetricAggregator.AGGREGATOR_TYPE.CLUSTER);
  PARTITION_AGGREGATION_TYPES.put(MetricCollectorHAController.METRIC_AGGREGATORS + "_1",
      TimelineMetricAggregator.AGGREGATOR_TYPE.HOST);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
逻辑名 实际名称 分区类型(示意) 说明
METRIC_AGGREGATE_MINUTE TimelineClusterAggregatorMinute CLUSTER(…_0) 集群分钟聚合
METRIC_RECORD_MINUTE TimelineMetricHostAggregatorMinute HOST(…_1) 主机分钟聚合
其他 同上 同上 小时/天粒度同理

结论

检查点键名 = 实际聚合器名称。从键名就能反推出窗口粒度与归属。

# 四、ZK PropertyStore 落点(优先来源)

聚合任务以 Helix Participant 身份加入集群,并在初始化阶段创建 CheckpointManager:

manager = HelixManagerFactory.getZKHelixManager(clusterName, instanceName, PARTICIPANT, zkAddress);
manager.connect();
checkpointManager = new CheckpointManager(manager.getHelixPropertyStore());
1
2
3

getHelixPropertyStore() 依赖 PropertyPathConfig 拼装前缀路径:

addEntry(PropertyType.PROPERTYSTORE, 1, "/{clusterName}/PROPERTYSTORE");
1

实拍两张图帮助定位:

image-20250922202233437

image-20250922202310437

操作建议

  1. 进入 ZK:定位 /<ams-cluster>/PROPERTYSTORE/;
  2. 按实际聚合器名(如 TimelineClusterAggregatorMinute)查找子节点;
  3. 节点值通常是毫秒时间戳,用于下一轮窗口起点。

# 五、本地 checkpoint 回退(何时会用到)

在没有 Helix/HA 或降级场景下,会回退到本地文件读取:

protected long readCheckPoint() {
  if (taskRunner != null) {
    return taskRunner.getCheckpointManager().readCheckpoint(aggregatorName);
  }
  try {
    File checkpoint = new File(getCheckpointLocation());
    if (checkpoint.exists()) {
      String contents = FileUtils.readFileToString(checkpoint);
      if (contents != null && !contents.isEmpty()) {
        return Long.parseLong(contents);
      }
    }
  } catch (IOException io) {
    LOG.debug("", io);
  }
  return -1;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

该目录由 ams-site.xml 配置:

image-20250922202753346

timeline.metrics.aggregator.checkpoint.dir
1

实际环境中的默认目录示例:

image-20250922203004309

说明

如果你在 /var/lib/ambari-metrics-collector/checkpoint 没有看到文件, 通常意味着系统正优先使用 ZK PropertyStore 保存检查点,这是正常现象。

#Ambari-Metrics#源码解析#Ambari#Phoenix
[/metrics/aggregated] — 分时日表数据溯源
控制面不能只靠一台机器

← [/metrics/aggregated] — 分时日表数据溯源 控制面不能只靠一台机器→

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