Spark Metric 指标/监测系统详解及源码分析

Metric

翻译自spark的官方文档:
Spark 有一个基于 Dropwizard 度量库的可配置度量系统。 这允许用户向各种接收器报告 Spark 指标,包括 HTTP、 JMX 和 CSV 文件。 
度量系统是通过一个配置文件配置的,Spark 希望该文件出现在 $Spark home / conf / 度量中。 属性。 可以通过 spark.metrics.conf 配置属性指定自定义文件位置。 默认情况下,用于驱动程序或执行器指标的根命名空间是 spark.app.id 的值。
 然而,通常情况下,用户希望能够跨应用程序跟踪驱动程序和执行程序的指标,这对于应用程序 ID (即 spark.app.ID)来说很难做到,因为它会随着应用程序的每次调用而变化。 对于这种用例,可以为使用 spark.metrics.namespace 配置属性的度量报告指定自定义名称空间。 
 例如,如果用户希望将度量名称空间设置为应用程序的名称,他们可以将 spark.metics.namespace 属性设置为类似 ${ spark.app.name }的值。 然后,该值由 Spark 适当扩展,并用作度量系统的根名称空间。 非驱动程序和执行器指标从来不会以 spark.app.id 作为前缀,spark.metris.namespace 属性也不会对这些指标产生任何影响。

通俗的来说,spark默认会读目录下配置: $SPARK_HOME/conf/metrics.properties. 不过也可以通过spark.metrics.conf参数指定。
这个配置文件是主要针对Spark内部组件监测的一个配置项。它可以配置一个或多个sinks。下面是metrics的一些基本属性概念:
“instance”指定“who”(角色)使用的指标体系。配置的实例可以是"master",“worker”, “executor”, “driver”, “applications” 。这些角色将创建指标系统来监测,所以这些实例等于这些角色。
“source”指定“where”(来源)收集的数据指标。在指标体系中,存在两种来源:
1、Spark内部source,像的MasterSource,WorkerSource等,它们会接收Spark组件的内部状态。这些source都与实例是创建特定的指标体系后,被添加的。
2、常见的source,就像JvmSource,这将低水平状态的收集,是由配置项决定的,并通过反射加载。
“sink”指定“where”(目的地)输出指标数据。多个sinks可以共存并冲洗指标,对所有这些汇总。
Metrics配置如下:

[instance].[sink|source].[name].[options] = xxxx

[instance]可以是"master", “worker”, “executor”, “driver”,
“applications”,这意味着只有指定的实例才有这个属性。可用通配符“”来代替实例名,这意味着所有的实例将具有这种属性。
[sink|source]表示该属性是source或者sink。此字段只能是source or sink。
[name] 指定sink or source的名称,它是自定义的
[options] 这是 source or sink的特定属性。
配置注意项:
1、添加一个新的sink,需要设置一个符合规范的class类名选项
2、Sink设置的轮询周期至少是一秒
3、指定名称的具体设置会覆盖带
号的,比如master.sink.console.period优先于*.sink.console.period.
4、Metrics具体配置。如:spark.metrics.conf=${SPARK_HOME}/conf/metrics.properties
必须添加java的参数如-Dspark.metrics.conf=xxx。如果把文件放在${SPARK_HOME}/conf目录下,它会自动加载。
5、在master, worker and client driver的sinks的默认添加方式是MetricsServlet处理。发送请求参数“/metrics/json”以josn的格
式注册metrics。对于master可以发送“/metrics/mastern/json”获取master实例和app。
Metrics配置案例,以CSVSink为例 :

# org.apache.spark.metrics.sink.CSVSink
# Enable CsvSink for all instances【为所有实例启用该csvsink】
*.sink.csv.class=org.apache.spark.metrics.sink.CsvSink
# Polling period for CsvSink  【配置CsvSink轮询周期和时间单位】
*.sink.csv.period=1
*.sink.csv.unit=minutes
# Polling directory for CsvSink【配置保存Csv文件的存储目录】
*.sink.csv.directory=/tmp/
# Worker instance overlap polling period【配置work实例轮询周期 这个会优先于*.sink.csv.period】
worker.sink.csv.period=10
worker.sink.csv.unit=minutes

待续…

你可能感兴趣的:(Spark)