MetricSystem指标系统

Spark的MetricsSystem通过MetricRegistry连接Sources和Sinks,定期推送Source中的指标数据到Sinks。Sources如MasterSource和WorkerSource收集Spark组件状态,而JvmSource收集底层状态。Sinks如ConsoleSink和MetricsServlet接收数据。MetricsServlet默认注册到Spark UI,允许通过HTTP访问指标数据。MetricsSystem启动涉及加载配置、注册Sources和Sinks,以及向Sinks添加ServletContextHandler。
摘要由CSDN通过智能技术生成

简介

MetricSystem通过一个特定的Instance创建,由sources和sinks组成,并周期性地将source中的指标数据推送到目标sink中去。MetricSystem使用codahale提供的第三方测量仓库Metrics。MetricSystem中有三个主要概念:

  • Instance:指定了谁在使用测量系统。目前在Spark中,已经实现的Instance有:master、worker、applications、driver、executor和shuffleService。
  • Source:指定了从哪里收集测量数据。在指标系统中,有两种类型的souce:
    • Spark internal source,如MasterSource和WorkerSource等,将会收集spark组件的内部状态。
    • Common source,如JvmSource,将会收集低层状态,它们是通过configuration进行配置并利用反射进行加载。
  • Sink:指定了往哪里发送测量数据。多个sinks可以共存,并且指标可以被同时发送给它们。Spark目前提供的Sink有ConsoleSink、CsvSink、JmxSink、MetricsServlet、GraphiteSink等。Spark中使用MetricsServlet作为默认的Sink。

指标的配置格式如下:

[instance].[sink|source].[name].[options] = xxxx
  • [instance]:可以是master、worker、executor、driver或者applications,这意味着只有对应的instance会有这个属性。通配符*则意味着所有的instance将会有这个属性。
  • [sink|source]:表明这个属性是属于source还是sink,这个部分的选项只能是source或sink。
  • [name]:表明sink或source的名称。
  • [options]:表示这个source或sink的特定属性。

下面以driver实例为例来介绍下MetricsSystem的创建与启动。

MetricsSystem的创建与启动

driver实例的MetricsSystem创建启动代码位于SparkContext类中。可以看到,创建好MetricsSystem后,则将所有的ServletContextHandler添加到Spark UI中,然后调用其start()方法启动,最后注册其他几个source对象。

// 创建SparkEnv,在SparkEnv创建过程中创建MetricsSystem
_env = createSparkEnv(_conf, isLocal, listenerBus)
SparkEnv.set(_env)

// Driver的metrics system需要将app ID设置到spark.app.id属性值中,
// 因此它应该在我们从task scheduler中得到app ID(在SchedulerBackend构造函数中创建)并且设置spark.app.id属性后再启动
// 启动MetricsSystem
_env.metricsSystem.start()
// 在metrics system启动后,将driver metrics servlet handler添加到web ui中
_env.metricsSystem.getServletHandlers.foreach(handler => ui.foreach(_.attachHandler(handler)))

// 等待taskScheduler的backend就绪
_taskScheduler.postStartHook()
_env.metricsSystem.registerSource(_dagScheduler.metricsSource)
_env.metricsSystem.registerSource(new BlockManagerSource(_env.blockManager))
_executorAllocationManager.foreach { e =>
  _env.metricsSystem.registerSource(e.executorAllocationManagerSource)
}

DAGSchedulerSource测量的信息是dagScheduler.failedStages、dagScheduler.runningStages、dagScheduler.waitingStages、dagScheduler.numTotalJobs、dagScheduler.activeJobs。

BlockManagerSource测量的信息是memory.maxMem_MB、memory.maxOnHeapMem_MB、memory.maxOffHeapMem_MB、memory.remainingMem_MB、memory.remainingOnHeapMem_MB、memory.remainingOffHeapMem_MB、memory.memUsed_MB、memory.onHeapMemUsed_MB、memory.offHeapMemUsed_MB、disk.diskSpaceUsed_

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值