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