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