Spark Streaming-Datenaustausch zwischen Stapeln
Spark Streaming verarbeitet die Daten in Mikro-Batches.
Jede Intervalldaten werden mithilfe von RDDs parallel verarbeitet, ohne dass Daten zwischen den einzelnen Intervallen ausgetauscht werden.
Aber mein Anwendungsfall muss die Daten zwischen Intervallen teilen.
Bedenke dieNetwork WordCount Beispiel, das die Anzahl aller in diesem Intervall empfangenen Wörter ergibt.
Wie würde ich die folgende Wortzahl erzeugen?
Relative Zählung für die Wörter "hadoop" und "spark" mit der vorherigen Intervallzählung
Normale Wortanzahl für alle anderen Wörter.
Hinweis: UpdateStateByKey führt die Stateful-Verarbeitung durch, dies gilt jedoch für jeden Datensatz und nicht für bestimmte Datensätze.
So, UpdateStateByKey erfüllt diese Anforderung nicht.
Aktualisieren
Betrachten Sie das folgende Beispiel
Intervall-1
Eingang
Sample Input with Hadoop and Spark on Hadoop
Ausgabe
hadoop 2
sample 1
input 1
with 1
and 1
spark 1
on 1
Intervall-2
Eingang
Another Sample Input with Hadoop and Spark on Hadoop and another hadoop another spark spark
Ausgabe
another 3
hadoop 1
spark 2
and 2
sample 1
input 1
with 1
on 1
Erläuterung
1. Intervall gibt die normale Wortanzahl aller Wörter an.
Im 2. Intervall kam es zu einer dreimaligen Überschreitung, die Ausgabe sollte jedoch 1 (3-2) sein
Spark ist dreimal aufgetreten, aber die Ausgabe sollte 2 (3-1) sein
Für alle anderen Wörter sollte die normale Wortzahl angegeben werden.
Während der Verarbeitung der Daten für das 2. Intervall sollte die Wortanzahl des 1. Intervalls @ sei hadoop undFunk
Dies ist ein einfaches Beispiel mit Illustration.
Im konkreten Anwendungsfall sind Felder, die eine gemeinsame Datennutzung erfordern, Teil des RDD-Elements (RDD), und es müssen sehr viele Werte verfolgt werden.
d. h. in diesem Beispiel wie Hadoop- und Spark-Keywords müssen fast 100.000 Keywords erfasst werden.
Ähnliche Fälle in Apache Storm: