专栏
天翼云开发者社区

spark metrics 源码分析

2023-10-31 10:20:15 8阅读

spark metrics 源码分析

 

1) 主要核心类是  MetricsSystem

MetricsSystem 有三个主要成员:sources 、 sinks 、 registry

其余的有一些常驻的server sink,用于长期作为sink 获取 注册信息。

 

  • sparkSubmit.runMain

  • prepareSubmitEnvironment

将childMainClass 设置为 spark-submit --class 参数中的类

然后childMainClass 作为prepareSubmitEnvironment 的 返回

 

  • SparkSubmit.runMain

    方法中 对 prepareSubmitEnvironment 返回的 childMainClass作判别

 

如果是SparkApplication的子类,就执行 子类

 

其他的就执行JavaMainApplication,直接执行spark-submit --class指定的  main类的main方法

 

  • 应用的main方法中

  • SparkSession.builder()

     返回一个 new Builder ,然后 getOrCreate 方法中

  • new SparkContext

  • sparkContext中会生成sparkEnv(sparkEnv (rpc endpoint )隶属于 sparkContext )

调用create 方法

在create方法中创建MetricsSystemInstances

 

 

 

 

2) sources

 

spark的每一个endpoint 都配备有自身的source,向metricsSystem发送消息

 

以ExecutorSource为例,

 

  • executor初始化时候会new 一个 ExecutorSource

 

  • ExecutorSource初始化时候,会将一系列指标  注册到MetricRegistry中,也就是codahale框架的MetricRegistry类对象中

 

  • 然后向 sparkEnv中 metricSystems 注册 executorSource

  • metricsSystem调用 registerSource 其实就是向 MetricsRegistry注册

 

 

  • executor.

    run()结束后

更新相应的指标到 execuorSource中去

数据都被记录到 executorSource中去了

 

3) Sinks

以CSVSinks为例,

 

  • CsvSinks 使用了 codahale 框架的 CsvReporter类

初始化绑定好文件后,

调用CsvReporter.start 开启 codahale .CsvReporter的Sink操作

 

  • 然后

 

CsvSink.report 触发  CsvReporter.report方法,从metricRegistry中获取指标

CsvSink.report

 CsvReporter.report

 

4) 总结

 

MetricSystems ≈ codahale .MetricRegistry (MetricSystem的其他内容就是register  和  start  、 stop 、 report 方法)

 

ExecutorSources ≈ 一系列 codahale 框架的指标,将这些指标注册到 codahale .MetricRegistry中

 

CSVSink ≈ codahale 框架的CSVReporter

 

MetricSystems.start ≈ source注册到MetricRegistry 、 Sink注册到MetricRegistry 、 Sinks.start(codahale 框架中 reporter.start) 方法

 

MetricSystems.start ≈ sinks.report ≈ MetricRegistry 相当于是一个容器,codahale.CsvReporter.report 触发指标的读取

 

综上,如果自写一套监控体系,我是可以办到的了

  • 0
  • 0
  • 0
0 评论
0/1000
评论(0) 发表评论
z****n

z****n

1 篇文章 0 粉丝
关注

spark metrics 源码分析

2023-10-31 10:20:15 8阅读

spark metrics 源码分析

 

1) 主要核心类是  MetricsSystem

MetricsSystem 有三个主要成员:sources 、 sinks 、 registry

其余的有一些常驻的server sink,用于长期作为sink 获取 注册信息。

 

  • sparkSubmit.runMain

  • prepareSubmitEnvironment

将childMainClass 设置为 spark-submit --class 参数中的类

然后childMainClass 作为prepareSubmitEnvironment 的 返回

 

  • SparkSubmit.runMain

    方法中 对 prepareSubmitEnvironment 返回的 childMainClass作判别

 

如果是SparkApplication的子类,就执行 子类

 

其他的就执行JavaMainApplication,直接执行spark-submit --class指定的  main类的main方法

 

  • 应用的main方法中

  • SparkSession.builder()

     返回一个 new Builder ,然后 getOrCreate 方法中

  • new SparkContext

  • sparkContext中会生成sparkEnv(sparkEnv (rpc endpoint )隶属于 sparkContext )

调用create 方法

在create方法中创建MetricsSystemInstances

 

 

 

 

2) sources

 

spark的每一个endpoint 都配备有自身的source,向metricsSystem发送消息

 

以ExecutorSource为例,

 

  • executor初始化时候会new 一个 ExecutorSource

 

  • ExecutorSource初始化时候,会将一系列指标  注册到MetricRegistry中,也就是codahale框架的MetricRegistry类对象中

 

  • 然后向 sparkEnv中 metricSystems 注册 executorSource

  • metricsSystem调用 registerSource 其实就是向 MetricsRegistry注册

 

 

  • executor.

    run()结束后

更新相应的指标到 execuorSource中去

数据都被记录到 executorSource中去了

 

3) Sinks

以CSVSinks为例,

 

  • CsvSinks 使用了 codahale 框架的 CsvReporter类

初始化绑定好文件后,

调用CsvReporter.start 开启 codahale .CsvReporter的Sink操作

 

  • 然后

 

CsvSink.report 触发  CsvReporter.report方法,从metricRegistry中获取指标

CsvSink.report

 CsvReporter.report

 

4) 总结

 

MetricSystems ≈ codahale .MetricRegistry (MetricSystem的其他内容就是register  和  start  、 stop 、 report 方法)

 

ExecutorSources ≈ 一系列 codahale 框架的指标,将这些指标注册到 codahale .MetricRegistry中

 

CSVSink ≈ codahale 框架的CSVReporter

 

MetricSystems.start ≈ source注册到MetricRegistry 、 Sink注册到MetricRegistry 、 Sinks.start(codahale 框架中 reporter.start) 方法

 

MetricSystems.start ≈ sinks.report ≈ MetricRegistry 相当于是一个容器,codahale.CsvReporter.report 触发指标的读取

 

综上,如果自写一套监控体系,我是可以办到的了

文章来自专栏

SPARK

1 篇文章 1 订阅
0 评论
0/1000
评论(0) 发表评论
  • 0
    点赞
  • 0
    收藏
  • 0
    评论