Внедрение источника метрик Spark и приемника для метрик пользовательского приложения

Я разместил ниже вопрос в списке рассылки пользователей Spark, но, как обычно, от сообщества нет ответа.

Каков наилучший способ измерения показателей приложения Spark как от драйвера, так и от исполнителя.

Я пытаюсь отправить свои показатели приложения Spark в Kafka. Я нашел два подхода.

Подход 1. Реализуйте пользовательский источник и приемник и используйте источник для инструментирования как из драйвера, так и из исполнителя (с помощью SparkEnv.metricSystem).

Подход 2: напишите dropwizard/gobblin KafkaReporter и используйте его для инструментирования как из драйвера, так и из исполнителя.

Какой из них будет лучшим подходом? И как ограничить метрики конкретным приложением, если мы выбираем подход 1?

Я попытался использовать подход 1, но когда я запускаю свое приложение, все контейнеры уничтожаются.

Шаги, которые я сделал, приведены ниже:

  1. Поскольку из org.apache.spark.metrics.sink нет KafkaSink, я реализовал свои собственные KafkaSink и KafkaReporter, как это предлагается в https://github.com/erikerlandson/spark-kafka-sink

  2. Реализован SparkMetricsSource путем расширения org.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. Настроил приемник через свойства искры


person Anil Kumar    schedule 19.04.2018    source источник
comment
Я начинаю верить, что это невозможно сделать даже в Spark 3. Я также не могу найти ответ на свой вопрос... stackoverflow.com /вопросы/63012890/   -  person Felipe    schedule 21.07.2020