Stateful Transformations with Windowing in Spark Streaming



Dette blogindlæg diskuterer statefulde transformationer med vindue i Spark Streaming. Lær alt om sporing af data på tværs af batches ved hjælp af state-fulde D-Streams.

Bidrag fra Prithviraj Bose

I denne blog vil vi diskutere vinduesbegrebet i Apache Sparks statefulde transformationer.





Hvad er stateful transformation?

Spark-streaming bruger en mikrobatcharkitektur, hvor de indgående data er grupperet i mikrobatcher kaldet Discretized Streams (DStreams), som også fungerer som den grundlæggende programmeringsabstraktion. DStreams har internt Resilient Distribuerede datasæt (RDD), og som et resultat af denne standard kan RDD-transformationer og handlinger udføres.



I streaming, hvis vi har en brugssag til at spore data på tværs af batches, har vi brug for statslige DStreams.

For eksempel sporer vi muligvis en brugers interaktion på et websted under brugersessionen, eller vi kan spore et bestemt twitter-hashtag over tid og se, hvilke brugere over hele kloden der taler om det.

Typer af statslig transformation.



State-fulde DStreams er af to typer - vinduesbaseret tracking og fuld session tracking.

For stateful tracking skal alle indgående data omdannes til nøgleværdipar, så nøgletilstandene kan spores på tværs af batches. Dette er en forudsætning.

Desuden skal vi også aktivere kontrolpunkt, et koncept som vi vil diskutere i de senere blogs.

> Vinduesbaseret sporing

I vinduesbaseret sporing er de indgående batcher grupperet i tidsintervaller, dvs. gruppebatcher hvert 'x' sekund. Yderligere beregninger på disse batches udføres ved hjælp af glideintervaller.

For eksempel, hvis vindueintervallet = 3 sek og diasintervallet = 2 sek, grupperes alle indgående data i batches hvert 3. sekund, og beregningerne på disse batcher sker hvert 2. sekund. Alternativt kan vi sige, udfør beregninger hvert 2. sekund på de batches, der ankom i de sidste 3 sekunder.

spark-streaming-dstream-window

I ovenstående diagram ser vi, at de indkommende batcher er grupperet hver 3. tidsenhed (vindueinterval), og beregningerne udføres hver 2. tidsenhed (diasinterval).
Bemærk: I modsætning til Apache Flink har Apache Spark ikke et koncept for tumlende vindue, alle vinduer glider.

ILD

En populær API til vinduesbaserede transformationer er

PairDStreamFunctions.reduceByKeyAndWindow .

Der er flere overbelastede versioner af denne API, lad os se den, der har flest parametre. Efter denne forklaring skal resten af ​​de overbelastede versioner af denne API være selvforklarende.

Returnerer: Den transformerede DStream [(K, V)]

reducereFunc : Den associative reduceringsfunktion.

invReduceFunc : Det omvendte af ovenstående reducerer funktion. Dette er nødvendigt for effektiv beregning af indgående og udgående batcher. Ved hjælp af denne funktion trækkes værdien af ​​de batches, der er udgående, fra den akkumulerede værdi af ovenstående reduceringsfunktion. For eksempel, hvis vi beregner summen af ​​de indgående værdier for de respektive taster, så trækker vi for de udgående batcher værdierne for de respektive taster (forudsat at de er til stede i den aktuelle batch ellers ignorerer).

vindueVarighed : Tidenheder til gruppering af batchene, dette skal være et multiplum af batchintervallet.

slideDuration : Enheder af tid til beregning, dette skal være et multiplum af batchintervallet. skillevægge : Partitioneren, der skal bruges til lagring af den resulterende DStream. Læs mere om partitionering dette .

filterFunc : Funktion til at filtrere udløbne nøgleværdipar, dvs. hvis vi f.eks. Ikke får en opdatering til en nøgle til et eller andet tidspunkt, vil vi muligvis fjerne den.

Her er en program at tælle de ord, der kommer fra en stikkontakt. Vi har brugt en overbelastet version af ovenstående funktion med et vindueinterval på 4 sekunder og et diasinterval på 2 sekunder.

hvordan man indstiller Java-sti i Windows

I min næste blog vil jeg skrive om fuld session tracking og checkpointing.

Har du et spørgsmål til os? Nævn det i kommentarfeltet, så vender vi tilbage til dig.

Relaterede indlæg:

Distribueret caching med Broadcast-variabler