Spark Metrics

  Spark拥有一个基于Coda Hale Metrics Library的可配置Metrics系统,

  这个Metrics系统通过配置文件进行配置。

  Spark的Metrics系统允许用户把Spark metrics信息报告到各种各样的sink包含HTTP和 JMX、CSV文件。

  Spark的metrics系统解耦到每个Spark组件的实例中。每个实例里,你可以配置一组sink(metrics被报告到的地方)。

  注:Coda Hale Metrics使用的Yammer.com开发的Metrics框架,官方网址是https://github.com/dropwizard/metrics ,相关文档可在https://dropwizard.github.io/metrics 查看。

配置文件

  默认的配置文件为“$SPARK_HOME/conf/metrics.properties”,Spark启动时候会自动加载它。

  如果想修改配置文件位置,可以使用java的运行时属性-Dspark.metrics.conf=xxx进行修改。。

Spark的Metrics系统支持的实例:

  • master:Spark standalone模式的 master进程。

  • applications:master进程里的一个组件,为各种应用作汇报.

  • worker:Spark standalone模式的一个worker进程。

  • executor:一个Spark executor.

  • driver:Spark driver进程(该进程指创建SparkContext的那个).

Spark的Metrics系统支持的Sink:

  Sink指定metrics信息发送到哪,每个instance可以设置一个或多个Sink。

  Sink源码位于包org.apache.spark.metrics.sink中。

ConsoleSink

  记录Metrics信息到Console中。

名称 默认值 描述
class org.apache.spark.metrics.sink.ConsoleSink Sink类
period 10 轮询间隔
unit seconds 轮询间隔的单位

CSVSink

  定期的把Metrics信息导出到CSV文件中。

名称 默认值 描述
class org.apache.spark.metrics.sink.CsvSink Sink类
period 10 轮询间隔
unit seconds 轮询间隔的单位
directory /tmp CSV文件存储的位置

JmxSink

可以通过JMX方式访问Mertics信息

名称 默认值 描述
class org.apache.spark.metrics.sink.JmxSink Sink类

MetricsServlet

名称 默认值 描述
class org.apache.spark.metrics.sink.MetricsServlet Sink类
path VARIES* Path prefix from the web server root
sample false Whether to show entire set of samples for histograms ('false' or 'true') |

  除master之外所有实例的默认路径为“/metrics/json”。

  master有两个路径: “/metrics/aplications/json” App的信息、 “/metrics/master/json” Master的信息

GraphiteSink

名称 默认值 描述
class org.apache.spark.metrics.sink.GraphiteSink Sink类
host NONE Graphite服务器主机名
port NONE Graphite服务器端口
period 10 轮询间隔
unit seconds 轮询间隔的单位
prefix EMPTY STRING Prefix to prepend to metric name

GangliaSink

由于Licene限制,默认没有放到默认的build里面。需要自己打包

名称 默认值 描述
class org.apache.spark.metrics.sink.GangliaSink Sink类
host NONE Ganglia 服务器的主机名或multicast group
port NONE Ganglia服务器的端口
period 10 轮询间隔
unit seconds 轮询间隔的单位
ttl 1 TTL of messages sent by Ganglia
mode multicast Ganglia网络模式('unicast' or 'multicast')

source:

  第一种为Spark内部source,MasterSource、WorkerSource等,它们会接收Spark组件的内部状态;

  第二种为通用source,如:JvmSource,它收集低级别的状态

配置方法

  Spark Metrics中通过Source来收集状态信息,通常sink来控制状态信息的发送。

语法:

syntax: [instance].sink|source.[name].[options]=[value]

说明:

[instance]:

  可取值为master、worker、executor、driver、applications、*等。

  * 配置所有实例的属性,但能被其实例重置.

sink|source:

  指定配置的是source,还是sink的属性

[name]:

  指定source或sink的名称

[options]:

[value]

注意:

  添加一个新sink,选项class的值为完整类名称(带包名)

  一些Sink牵涉轮询时间,最短的轮询时间是1秒

  精确的instance会覆盖*配置,如:master.sink.console.period会覆盖*.sink.console.period

  在 master 和 worker、client driver 中默认开启 MetricsServlet , 所以你可以发送HTTP请求“/metrics/json”来获取JSON格式的所有metrics信息快照,请求“/metrics/master/json”和“/metrics/applications/json”来获取master实例和应用的信息。

示例

通过类名为所有实例开启ConsoleSink

*.sink.console.class=org.apache.spark.metrics.sink.ConsoleSink

ConsoleSink的轮询周期 *.sink.console.period=10

*.sink.console.unit=seconds

Master实例重置轮询周期

master.sink.console.period=15

master.sink.console.unit=seconds

通过类名为所有实例开启JmxSink

*.sink.jmx.class=org.apache.spark.metrics.sink.JmxSink

为所有实例开启CsvSink

*.sink.csv.class=org.apache.spark.metrics.sink.CsvSink

CsvSink的轮询周期

*.sink.csv.period=1

*.sink.csv.unit=minutes

Polling directory for CsvSink *.sink.csv.directory=/tmp/

Worker实例重置轮询周期

worker.sink.csv.period=10

worker.sink.csv.unit=minutes

为master和worker、driver、executor开启jvm source

master.source.jvm.class=org.apache.spark.metrics.source.JvmSource

worker.source.jvm.class=org.apache.spark.metrics.source.JvmSource

driver.source.jvm.class=org.apache.spark.metrics.source.JvmSource

executor.source.jvm.class=org.apache.spark.metrics.source.JvmSource

参考文档:

${SPARK_HOME}/conf/metrics.properties.template
http://spark.apache.org/docs/latest/monitoring.html