为自定义应用程序指标实现Spark指标源和Sink

时间:2018-04-19 15:51:20

标签: scala apache-spark codahale-metrics

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

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

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

方法1:实现自定义源和接收器,并使用源从驱动程序和执行程序进行检测(通过使用SparkEnv.metricSystem)。

方法2:编写dropwizard / gobblin KafkaReporter并将其用于来自Driver / Executor的仪器

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

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

我所做的步骤如下:

  1. 由于org.apache.spark.metrics.sink没有KafkaSink,我已根据https://github.com/erikerlandson/spark-kafka-sink

  2. 的建议实现了自定义KafkaSink和KafkaReporter
  3. 通过扩展org.apache.spark.metrics.source.Source

  4. 实施SparkMetricsSource
  5. 注册了来源

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

    sparkMetricsSource.registerGauge(sparkEnv.spark.sparkContext.applicationId, schema, "app-start", System.currentTimeMillis)
    
  7. 通过火花属性配置接收器

0 个答案:

没有答案