我在 Spark 用户邮件列表上发布了以下问题,但像往常一样,社区没有回复。
从 Driver 和 Executor 检测 Spark 应用程序指标的最佳方法是什么。
我正在尝试将我的 Spark 应用程序指标发送到 Kafka。我找到了两种方法。
方法 1:实现自定义 Source 和 Sink,并使用 Source 从 Driver 和 Executor 进行检测(通过使用 SparkEnv.metricSystem)。
方法 2:编写 dropwizard/gobblin KafkaReporter 并将其用于 Driver/Executor 的检测
哪一个会更好?如果我们采用方法 1,如何将指标限制为特定于应用程序?
我尝试使用方法 1,但是当我启动我的应用程序时,所有容器都被杀死了。
我做的步骤如下:
由于没有来自 org.apache.spark.metrics.sink 的 KafkaSink,我已经按照https://github.com/erikerlandson/spark-kafka-sink中的建议实现了我的自定义 KafkaSink 和 KafkaReporter
通过扩展实现 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)
通过 spark 属性配置 Sink