2

我在 Spark 用户邮件列表上发布了以下问题,但像往常一样,社区没有回复。

从 Driver 和 Executor 检测 Spark 应用程序指标的最佳方法是什么。

我正在尝试将我的 Spark 应用程序指标发送到 Kafka。我找到了两种方法。

方法 1:实现自定义 Source 和 Sink,并使用 Source 从 Driver 和 Executor 进行检测(通过使用 SparkEnv.metricSystem)。

方法 2:编写 dropwizard/gobblin KafkaReporter 并将其用于 Driver/Executor 的检测

哪一个会更好?如果我们采用方法 1,如何将指标限制为特定于应用程序?

我尝试使用方法 1,但是当我启动我的应用程序时,所有容器都被杀死了。

我做的步骤如下:

  1. 由于没有来自 org.apache.spark.metrics.sink 的 KafkaSink,我已经按照https://github.com/erikerlandson/spark-kafka-sink中的建议实现了我的自定义 KafkaSink 和 KafkaReporter

  2. 通过扩展实现 SparkMetricsSourceorg.apache.spark.metrics.source.Source

  3. 注册了源

    val sparkMetricsSource = new SparkMetricsSource("spark.xyz.app.prefix")
    SparkEnv.get.metricsSystem.registerSource(sparkMetricsSource)
    
  4. 检测指标

    sparkMetricsSource.registerGauge(sparkEnv.spark.sparkContext.applicationId, schema, "app-start", System.currentTimeMillis)
    
  5. 通过 spark 属性配置 Sink

4

0 回答 0