Я разместил ниже вопрос в списке рассылки пользователей Spark, но, как обычно, от сообщества нет ответа.
Каков наилучший способ измерения показателей приложения Spark как от драйвера, так и от исполнителя.
Я пытаюсь отправить свои показатели приложения Spark в Kafka. Я нашел два подхода.
Подход 1. Реализуйте пользовательский источник и приемник и используйте источник для инструментирования как из драйвера, так и из исполнителя (с помощью SparkEnv.metricSystem).
Подход 2: напишите dropwizard/gobblin KafkaReporter и используйте его для инструментирования как из драйвера, так и из исполнителя.
Какой из них будет лучшим подходом? И как ограничить метрики конкретным приложением, если мы выбираем подход 1?
Я попытался использовать подход 1, но когда я запускаю свое приложение, все контейнеры уничтожаются.
Шаги, которые я сделал, приведены ниже:
Поскольку из org.apache.spark.metrics.sink нет KafkaSink, я реализовал свои собственные KafkaSink и KafkaReporter, как это предлагается в https://github.com/erikerlandson/spark-kafka-sink
Реализован SparkMetricsSource путем расширения
org.apache.spark.metrics.source.Source
зарегистрировал источник
val sparkMetricsSource = new SparkMetricsSource("spark.xyz.app.prefix") SparkEnv.get.metricsSystem.registerSource(sparkMetricsSource)
Инструментальные показатели
sparkMetricsSource.registerGauge(sparkEnv.spark.sparkContext.applicationId, schema, "app-start", System.currentTimeMillis)
Настроил приемник через свойства искры