Spark的MetricsSystem是基于Coda Hale Metrics Library的的一套可配置Metrics系统,用于度量Spark系统的各项指标。

1、MetricsSystem的体系结构

Spark的Metrics系统目前支持以下的实例:
○ master:Spark standalone模式的master进程;
○ worker:Spark standalone模式的worker进程;
○ executor:Spark executor;
○ driver:Spark driver进程;
○ applications:master进程里的一个组件,为各种应用作汇报。

metrics结构主要分为sink和source。

source:度量系统的数据源,Source内属性包含name和MetricRegistry,主要有:MasterSource、WorkerSource、ApplicationSource、StreamingSource、BlockManagerSource等。

Sink:度量系统结构的接收端。目前包括ConsoleSink、GangliaSink、GraphiteSink、MetricsServlet、JmxSink、CsvSink。

2、配置

在spark的conf目录下metrics.properties文件中配置,默认使用此文件,也可以通过-Dspark.metrics.conf=xxx指定。

sink配置参数说明

ConsoleSink 是记录Metrics信息到Console中

名称默认值描述
classorg.apache.spark.metrics.sink.ConsoleSinkSink类
period10轮询间隔
unitseconds轮询间隔的单位

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

名称默认值描述
classorg.apache.spark.metrics.sink.CsvSinkSink类
period10轮询间隔
unitseconds轮询间隔的单位
directory/tmpCSV文件存储的位置

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

名称默认值描述
classorg.apache.spark.metrics.sink.JmxSinkSink类

MetricsServlet

名称默认值描述
classorg.apache.spark.metrics.sink.MetricsServletSink类
pathVARIES*Path prefix from the web server root
samplefalseWhether to show entire set of samples for histograms ('false' or 'true') |

这个在Spark中默认就开启了,我们可以在4040端口页面的URL后面加上/metrics/json查看

GraphiteSink

名称默认值描述
classorg.apache.spark.metrics.sink.GraphiteSinkSink类
hostNONEGraphite服务器主机名
portNONEGraphite服务器端口
period10轮询间隔
unitseconds轮询间隔的单位
prefixEMPTY STRINGPrefix to prepend to metric name

GangliaSink 由于Licene的限制,默认没有放到默认的build里面,如果需要使用,需要自己编译

名称默认值描述
classorg.apache.spark.metrics.sink.GangliaSinkSink类
hostNONEGanglia 服务器的主机名或multicast group
portNONEGanglia服务器的端口
period10轮询间隔
unitseconds轮询间隔的单位
ttl1TTL of messages sent by Ganglia
modemulticastGanglia网络模式('unicast' or 'multicast')

3、Jmx配置实例

(1)修改$SPARK_HOME/sbin/start-master.sh 以及 start-slave.sh(所有机器)

#配置Java的启动参数jmx,连接端口
export SPARK_DAEMON_JAVA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=xxxx"

注:如果Spark 的 Master 和其中之一的 Worker 在同一台机器上,会出现端口冲突的情况。

(2)配置$SPARK_HOME/conf/metrics.properties

#设置要注册的实例master和worker
master.sink.jmx.class=org.apache.spark.metrics.sink.JmxSink
worker.sink.jmx.class=org.apache.spark.metrics.sink.JmxSink
master.source.jvm.class=org.apache.spark.metrics.source.JvmSource
worker.source.jvm.class=org.apache.spark.metrics.source.JvmSource

设置好后,重新启动spark集群。

打开jconsole,经测试可成功连接,获取worker和Master相关信息

参考资料:https://www.cnblogs.com/fengzzi/p/10033810.html