spark 2.0 metrics example of spark sink -- JmxSink
来源:互联网 发布:淘宝视频要求 编辑:程序博客网 时间:2024/05/29 03:43
When JxmSink object is instantiated, a reporter object is created.
private[spark] class JmxSink(val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val reporter: JmxReporter = JmxReporter.forRegistry(registry).build() override def start() { reporter.start() } override def stop() { reporter.stop() } override def report() { }}
The sequences of operations after val reporter: JmxReporter = JmxReporter.forRegistry(registry).build()
is called.
public static Builder forRegistry(MetricRegistry registry) { return new Builder(registry); } private Builder(MetricRegistry registry) { this.registry = registry; this.rateUnit = TimeUnit.SECONDS; this.durationUnit = TimeUnit.MILLISECONDS; this.domain = "metrics"; this.objectNameFactory = new DefaultObjectNameFactory(); this.specificDurationUnits = Collections.emptyMap(); this.specificRateUnits = Collections.emptyMap(); } /** * Builds a {@link JmxReporter} with the given properties. * * @return a {@link JmxReporter} */ public JmxReporter build() { final MetricTimeUnits timeUnits = new MetricTimeUnits(rateUnit, durationUnit, specificRateUnits, specificDurationUnits); if (mBeanServer==null) { mBeanServer = ManagementFactory.getPlatformMBeanServer(); } return new JmxReporter(mBeanServer, domain, registry, filter, timeUnits, objectNameFactory); }
then, the start method of MetricsSystem is called. sinks.foreach(_.start)
def start() { require(!running, "Attempting to start a MetricsSystem that is already running") running = true StaticSources.allSources.foreach(registerSource) registerSources() registerSinks() sinks.foreach(_.start) }
then start() method of JmxSink is called.
override def start() { reporter.start() }
code of reporter.start()
:
public void start() { registry.addListener(listener); }
Code of addListener method of MetricRegisty class.
/** * Adds a {@link MetricRegistryListener} to a collection of listeners that will be notified on * metric creation. Listeners will be notified in the order in which they are added. * <p/> * <b>N.B.:</b> The listener will be notified of all existing metrics when it first registers. * * @param listener the listener that will be notified */ public void addListener(MetricRegistryListener listener) { listeners.add(listener); for (Map.Entry<String, Metric> entry : metrics.entrySet()) { notifyListenerOfAddedMetric(listener, entry.getValue(), entry.getKey()); } }
private void notifyListenerOfAddedMetric(MetricRegistryListener listener, Metric metric, String name) { if (metric instanceof Gauge) { listener.onGaugeAdded(name, (Gauge<?>) metric); } else if (metric instanceof Counter) { listener.onCounterAdded(name, (Counter) metric); } else if (metric instanceof Histogram) { listener.onHistogramAdded(name, (Histogram) metric); } else if (metric instanceof Meter) { listener.onMeterAdded(name, (Meter) metric); } else if (metric instanceof Timer) { listener.onTimerAdded(name, (Timer) metric); } else { throw new IllegalArgumentException("Unknown metric type: " + metric.getClass()); } }
take onCounterAdded as an example. This method is a method of JmxListener which is a static class of JmxReportor.
@Override public void onCounterAdded(String name, Counter counter) { try { if (filter.matches(name, counter)) { final ObjectName objectName = createName("counters", name); registerMBean(new JmxCounter(counter, objectName), objectName); } } catch (InstanceAlreadyExistsException e) { LOGGER.debug("Unable to register counter", e); } catch (JMException e) { LOGGER.warn("Unable to register counter", e); } }
type=counters,this.name = metrics
private ObjectName createName(String type, String name) { return objectNameFactory.createName(type, this.name, name); }
objetNameFactory is object of DefaultObjectNameFactory, which implements ObjectNameFactory. objetNameFactory in instantiated at Builder.build() method.
public class DefaultObjectNameFactory implements ObjectNameFactory { private static final Logger LOGGER = LoggerFactory.getLogger(JmxReporter.class); @Override public ObjectName createName(String type, String domain, String name) { try { ObjectName objectName = new ObjectName(domain, "name", name); if (objectName.isPattern()) { objectName = new ObjectName(domain, "name", ObjectName.quote(name)); } return objectName; } catch (MalformedObjectNameException e) { try { return new ObjectName(domain, "name", ObjectName.quote(name)); } catch (MalformedObjectNameException e1) { LOGGER.warn("Unable to register {} {}", type, name, e1); throw new RuntimeException(e1); } } }}public interface ObjectNameFactory { ObjectName createName(String type, String domain, String name);}
JmxCounter
private static class JmxCounter extends AbstractBean implements JmxCounterMBean { private final Counter metric; private JmxCounter(Counter metric, ObjectName objectName) { super(objectName); this.metric = metric; } @Override public long getCount() { return metric.getCount(); } }
Counter is a class in com.codahale.metrics package.
- spark 2.0 metrics example of spark sink -- JmxSink
- spark core 2.0 ExecutorSource Metrics统计
- Spark Metrics配置详解
- Spark Metrics配置详解
- spark Metrics System hack
- Spark Metrics配置详解
- An example of Integrating Spark and Cassandra
- spark 监控--WebUi、Metrics System
- Spark: Introduction of Spark
- Spark的Example---SparkPi
- Spark SQL Example
- Spark example WordCount
- Spark源码走读9——Metrics
- spark 2.1 metrics Source and BlockManagerSource
- [Spark]Spark Streaming 指南一 Example
- spark function api and example
- Example Self Contained Spark Application
- 从零开始学习Spark--第3章 spark的example
- nginx源码分析--内存池
- 移动窗口
- 1548 欧姆诺姆和糖果 51NOD
- tcl安装与学习
- 工业大数据漫谈8:工业大数据的采集
- spark 2.0 metrics example of spark sink -- JmxSink
- 图片圆角实现
- Android ScrollView中的ListView只显示一个条目问题
- alter system flush buffer_cache
- Xamarin XAML语言教程Xamarin.Forms中改变活动指示器颜色
- 动手写一个"liveReload"
- WebApi系列--接口测试工具:WebApiTestClient
- 鼠标拖拽事件
- 目标检测(转载)