Erklärte Funkenakkumulatoren: Apache Spark



In diesem Apache Spark-Blog werden Spark-Akkumulatoren ausführlich erläutert. Erfahren Sie anhand von Beispielen, wie Spark-Akkus verwendet werden. Funkenakkumulatoren sind wie Hadoop Mapreduce-Zähler.

Beitrag von Prithviraj Bose

Hier ist ein Blog über die Dinge, die Sie über Spark-Akkumulatoren wissen müssen.Mit Als Schlüsselkompetenz, nach der die meisten IT-Personalvermittler suchen, war das Wachstum und die Nachfrage in der Branche seit ihrer Gründung exponentiell.





Was sind Akkumulatoren?

Akkumulatoren sind Variablen, die zum Aggregieren von Informationen zwischen den Ausführenden verwendet werden. Diese Informationen können sich beispielsweise auf Daten oder API-Diagnosen beziehen, z. B. wie viele Datensätze beschädigt sind oder wie oft eine bestimmte Bibliotheks-API aufgerufen wurde.

Um zu verstehen, warum wir Akkus benötigen, sehen wir uns ein kleines Beispiel an.



Was sind die 6 Möglichkeiten, dieses Schlüsselwort zu verwenden?

Hier ist ein imaginäres Protokoll der Transaktionen einer Ladenkette in der zentralen Region Kolkata.

logs-Spark-accumulators

Es gibt 4 Felder,

Feld 1 -> Stadt



Feld 2 -> Lokalität

Feld 3 -> Kategorie des verkauften Artikels

Feld 4 -> Wert des verkauften Artikels

Die Protokolle können jedoch beschädigt sein. Zum Beispiel ist die zweite Zeile eine leere Zeile, die vierte Zeile meldet einige Netzwerkprobleme und schließlich zeigt die letzte Zeile einen Verkaufswert von Null (was nicht passieren kann!).

Wir können Akkumulatoren verwenden, um das Transaktionsprotokoll zu analysieren, um die Anzahl der leeren Protokolle (Leerzeilen), die Häufigkeit des Netzwerkausfalls, jedes Produkt ohne Kategorie oder sogar die Häufigkeit der Nullverkäufe zu ermitteln. Das vollständige Beispielprotokoll finden Sie Hier .
Akkus sind für alle Vorgänge anwendbar, bei denen:
1. Kommutativ -> f (x, y) = f (y, x) , und
2. Assoziativ -> f (f (x, y), z) = f (f (x, z), y) = f (f (y, z), x)
Beispielsweise, Summe und max Funktionen erfüllen die obigen Bedingungen, während durchschnittlich nicht.

wie man eine MySQL-Datenbank in Java verbindet

Warum Spark Accumulators verwenden?

Warum brauchen wir Akkumulatoren und warum nicht einfach Variablen, wie im folgenden Code gezeigt?

Das Problem mit dem obigen Code besteht darin, dass der Treiber die Variable druckt blankLines sein Wert wird Null sein. Dies liegt daran, dass beim Versenden dieses Codes durch Spark an jeden Executor die Variablen für diesen Executor lokal werden und sein aktualisierter Wert nicht an den Treiber zurückgesendet wird. Um dieses Problem zu vermeiden, müssen wir machen blankLines ein Akkumulator, so dass alle Aktualisierungen dieser Variablen in jedem Executor an den Treiber zurückgesendet werden. Der obige Code sollte also wie folgt geschrieben werden:

Dies garantiert, dass der Akku blankLines wird für jeden Executor aktualisiert und die Updates werden an den Treiber zurückgesendet.

Wir können andere Zähler für Netzwerkfehler oder einen Verkaufswert von Null usw. implementieren. Der vollständige Quellcode sowie die Implementierung der anderen Zähler können gefunden werden Hier .

Personen, die mit Hadoop Map-Reduce vertraut sind, werden feststellen, dass die Akkumulatoren von Spark den Hadoop-Zählern für Map-Reduce ähnlich sind.

Vorsichtsmaßnahmen

Bei der Verwendung von Akkumulatoren gibt es einige Einschränkungen, die wir als Programmierer beachten müssen:

  1. Berechnungen im Inneren Transformationen werden träge ausgewertet, es sei denn, ein Aktion passiert auf dem RDD der Transformationen werden nicht ausgeführt. Infolgedessen werden Akkus, die in Funktionen wie verwendet werden, wie z Karte() oder Filter() wird nicht ausgeführt, es sei denn, einige Aktion auf dem RDD passieren.
  2. Spark garantiert die Aktualisierung von Akkus Innerhalb Aktionen nur einmal . Selbst wenn eine Aufgabe neu gestartet und die Linie neu berechnet wird, werden die Akkumulatoren nur einmal aktualisiert.
  3. Spark garantiert dies nicht für Transformationen . Wenn also eine Aufgabe neu gestartet und die Linie neu berechnet wird, besteht die Möglichkeit unerwünschter Nebenwirkungen, wenn die Akkumulatoren mehrmals aktualisiert werden.

Verwenden Sie zur Sicherheit immer NUR Akkus innerhalb von Aktionen.
Der Code Hier zeigt ein einfaches, aber effektives Beispiel, wie dies erreicht werden kann.
Weitere Informationen zu Akkumulatoren finden Sie unter Dies .

Hast du eine Frage an uns? Erwähnen Sie sie im Kommentarbereich und wir werden uns bei Ihnen melden.

Zusammenhängende Posts:

Apache Spark kombinierenByKey erklärt