Spark-Streaming benutzerdefinierte Metriken

8

Ich arbeite an einem Spark-Streaming-Programm, das einen Kafka-Stream abruft, sehr grundlegende Transformation im Stream durchführt und dann die Daten in einen DB (Voltdb, wenn es relevant ist) einfügt. Ich versuche die Rate zu messen, mit der ich Zeilen in die Datenbank einfüge. Ich denke, Metriken können nützlich sein (mit JMX). Ich kann jedoch nicht herausfinden, wie benutzerdefinierte Metriken zu Spark hinzugefügt werden. Ich habe Sparks Quellcode angeschaut und auch gefunden Thread aber es funktioniert nicht für mich. Ich habe auch die JMX-Senke in der Datei conf.metrics aktiviert. Was nicht funktioniert, ist, dass meine benutzerdefinierten Messwerte nicht mit JConsole angezeigt werden.

Könnte jemand erklären, wie man benutzerdefinierte Metriken (vorzugsweise über JMX) zum Funken-Streaming hinzufügt? Oder alternativ, wie meine Einführungsrate zu meiner DB (speziell VoltDB) zu messen? Ich verwende Spark mit Java 8.

    
Gideon 29.09.2015, 12:17
quelle

4 Antworten

13

Nach dem Durchsuchen des Quellcodes habe ich herausgefunden, wie ich meine eigenen benutzerdefinierten Messwerte hinzufügen kann. Es erfordert 3 Dinge:

  1. Erstellen Sie meine eigene benutzerdefinierte Quelle So ähnlich wie dies
  2. Aktivieren Sie die Jmx-Senke in der Datei spark metrics.properties. Die spezifische Zeile, die ich verwendet habe, ist: *.sink.jmx.class=org.apache.spark.metrics.sink.JmxSink , die JmxSink für alle Instanzen aktivieren
  3. Registrieren Sie meine benutzerdefinierte Quelle im SparkEnv-Metrikensystem. Ein Beispiel dafür, wie man vorgeht, ist hier - Ich habe diesen Link zwar schon einmal angesehen, aber den Registrierungsteil verpasst, der mich daran hinderte, meine benutzerdefinierten Messwerte in JVisualVM
  4. zu sehen

Ich habe immer noch Probleme damit, die Anzahl der Einfügungen in VoltDB zu zählen, weil der Code auf den Executoren läuft, aber das ist ein Thema für ein anderes Thema:)

Ich hoffe, das wird anderen helfen

    
Gideon 01.10.2015, 09:12
quelle
3

um Zeilen basierend auf Einfügungen von VoltDB einzufügen, benutze Akkumulatoren - und dann von deinem Treiber kannst du einen Listener erstellen - vielleicht so etwas, um loszulegen

%Vor%

Hier haben Sie Zugriff auf diese Zeilen kombiniert Akkumulatoren und dann können Sie an Ihre Spüle senden ..

    
robert towne 07.11.2015 23:55
quelle
3

Groupon haben eine Bibliothek namens spark-metrics , mit der Sie eine einfache (Codahale-ähnliche) API auf Ihren Executoren verwenden können Die Ergebnisse werden im Treiber gesammelt und automatisch in der vorhandenen Metrik-Registrierung von Spark registriert. Diese werden dann automatisch zusammen mit Sparks integrierten Metriken exportiert, wenn Sie eine Metriksenke gemäß der Spark-Dokumentation .

    
Martin McNulty 28.03.2017 12:32
quelle
2

Hier finden Sie ein hervorragendes Tutorial, das alle Setups abdeckt, die Sie benötigen, um Sparks MetricsSystem mit Graphite einzurichten. Das sollte den Trick machen:

Ссылка

    
Erik Schmiegelow 29.09.2015 15:09
quelle