注:本文是为了配合《Spark内核设计的艺术——架构设计与实现》一书的内容而编写,目的是为了节省成本、方便读者查阅。书中附录D的内容都在本文呈现。
Metrics是codahale提供的第三方度量仓库。Metrics作为一款监控指标的度量类库,可以为第三方库提供辅助统计信息,还可以将度量数据发送给Ganglia和Graphite以提供图形化的监控。
Metrics也采用了监听器模式,提供了Gauge、Counter、Meter、Histogram、Timer等度量工具类以及健康检查(HealthCheck)功能。想了解更多Metrics的内容,读者可以访问Metrics官网:http://metrics.dropwizard.io/3.2.2/
本文将对Metrics中的核心类进行介绍,方便读者对Spark度量系统更加细致深入的理解。
MetricRegistry
MetricRegistry是Metrics提供的度量容器,这里先列出MetricRegistry的主要结构。
public class MetricRegistry implements MetricSet {
private final ConcurrentMap<String, Metric> metrics;
private final List<MetricRegistryListener> listeners;
}
从上面代码可以看出MetricRegistry中会缓存各种度量和监听器,下面对MetricRegistry中的一些方法进行介绍。
1、name
功能描述:构建形如“字符串1.字符串2…字符串N-1.字符串N”这样的字符串。任何空值或空字符串都将被过滤。 public static String name(String name, String... names) {
final StringBuilder builder = new StringBuilder();
append(builder, name);
if (names != null) {
for (String s : names) {
append(builder, s);
}
}
return builder.toString();
}
2、notifyListenerOfAddedMetric
功能描述:当有新的Metric添加到ConcurrentMap<String, Metric> metrics时,调用此方法。根据Metric的子接口的不同,调用不同方法。例如:Gauge则调用监听器的onGaugeAdded;Counter则调用监听器的onCounterAdded;Histogram则调用监听器的onHistogramAdded。 private void notifyListenerOfAddedMetric(MetricRegi