簡體   English   中英

如何創建一個源以將指標從 Spark 導出到另一個接收器(Prometheus)?

[英]How to create a source to export metrics from Spark to another sink (Prometheus)?

我正在嘗試從用 Scala 編寫的 spark 應用程序創建指標源,以將數據導出到另一個系統,比 Prometheus 更可取。 根據來自數據磚的這個站點,我需要創建一個擴展 Source 特征的源。 但是,Source trait 是private[spark] trait Source ,我的源無法將其可視化。 當我創建這個 class 時,我收到錯誤Symbol Source is inaccessible from this place

package org.sense.spark.util

import org.apache.spark.metrics.source.Source
import com.codahale.metrics.{Counter, Histogram, MetricRegistry}

class MetricSource extends Source {
  override val sourceName: String = "MySource"

  override val metricRegistry: MetricRegistry = new MetricRegistry

  val FOO: Histogram = metricRegistry.histogram(MetricRegistry.name("fooHistory"))
  val FOO_COUNTER: Counter = metricRegistry.counter(MetricRegistry.name("fooCounter"))
}

如何創建源以將數據導出到 Prometheus? 我想從combineByKey轉換中的 UDF 導出監控值。 這些值將是此轉換的聚合延遲和吞吐量輸入/輸出。

這是我的build.sbt文件,以防有必要檢查我正在使用的庫。

name := "explore-spark"

version := "0.2"

scalaVersion := "2.12.3"

val sparkVersion = "3.0.0"

libraryDependencies ++= Seq(
  "org.apache.spark" %% "spark-core" % sparkVersion,
  "org.apache.spark" %% "spark-streaming" % sparkVersion % "provided",
  "org.apache.spark" %% "spark-sql" % sparkVersion % "provided",
  "com.twitter" %% "algebird-core" % "0.13.7",
  "joda-time" % "joda-time" % "2.5",
  "org.fusesource.mqtt-client" % "mqtt-client" % "1.16"
)

mainClass in(Compile, packageBin) := Some("org.sense.spark.app.App")
mainClass in assembly := Some("org.sense.spark.app.App")

assemblyOption in assembly := (assemblyOption in assembly).value.copy(includeScala = false)
assemblyJarName in assembly := s"${name.value}_${scalaBinaryVersion.value}-fat_${version.value}.jar"

您需要將擴展 Source 的 class 放在與源相同的 package 中

package org.apache.spark.metrics.source

import com.codahale.metrics.{Counter, Histogram, MetricRegistry}

class MetricsSource extends Source {
  override val sourceName: String = "MySource"

  override val metricRegistry: MetricRegistry = new MetricRegistry

    val FOO: Histogram = metricRegistry.histogram(MetricRegistry.name("fooHistory"))

  val FOO_COUNTER: Counter = metricRegistry.counter(MetricRegistry.name("fooCounter"))
}

如果您需要使用 prometheus sink 而不是控制台 sink,您可以使用為 spark prometheus sink 編寫的第三方庫。 這通過 pushgateway -https://github.com/banzaicloud/spark-metrics/blob/master/PrometheusSink.md工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM