Stateful Transformations with Windowing in Spark Streaming



Dette blogginnlegget diskuterer stateful transformasjoner med windowsing i Spark Streaming. Lær alt om sporing av data på tvers av grupper ved hjelp av D-Streams.

Bidratt av Prithviraj Bose

I denne bloggen vil vi diskutere windowsing-konseptet til Apache Sparks stateful transformations.





Hva er stateful transformation?

Spark streaming bruker en mikrobatcharkitektur der innkommende data grupperes i mikrobatcher kalt Discretized Streams (DStreams), som også fungerer som grunnleggende programmeringsabstraksjon. DStreams har internt Resilient Distributed Datasets (RDD), og som et resultat av denne standarden kan RDD-transformasjoner og handlinger gjøres.



I streaming hvis vi har en brukstilfelle for å spore data på tvers av batcher, trenger vi DStreams.

For eksempel kan vi spore en brukers interaksjon på et nettsted under brukersesjonen, eller vi kan spore en bestemt Twitter-hashtag over tid og se hvilke brukere over hele verden som snakker om det.

Typer statlig transformasjon.



Statlige DStreams er av to typer - vindusbasert sporing og full øktsporing.

For stateful tracking bør alle innkommende data transformeres til nøkkelverdipar slik at nøkkeltilstandene kan spores på tvers av batcher. Dette er en forutsetning.

Videre bør vi også aktivere kontrollpunkting, et konsept som vi vil diskutere i de senere bloggene.

> Vindusbasert sporing

I vindusbasert sporing grupperes de innkommende gruppene i tidsintervaller, dvs. gruppesatser hvert ‘x’ sekund. Ytterligere beregninger av disse gruppene gjøres ved hjelp av lysbildeintervaller.

For eksempel hvis vindusintervallet = 3 sek og lysintervallet = 2 sek, vil alle innkommende data grupperes i grupper hvert 3. sekund, og beregningene på disse gruppene vil skje hvert 2. sekund. Alternativt kan vi si, gjør beregninger hvert 2. sekund på batchene som ankom de siste 3 sekundene.

spark-streaming-dstream-window

I diagrammet ovenfor ser vi at de innkommende gruppene er gruppert hver 3. tidsenhet (vinduintervall) og beregningene gjøres hver 2. tidsenhet (lysintervall).
Merk: I motsetning til Apache Flink, har ikke Apache Spark et konsept med å tumle vindu, alle vinduer glir.

BRANN

Et populært API for vindusbaserte transformasjoner er

PairDStreamFunctions.reduceByKeyAndWindow .

Det er flere overbelastede versjoner av denne API-en, la oss se den som har flest parametere. Etter denne forklaringen, bør resten av de overbelastede versjonene av denne APIen være selvforklarende.

hvordan du bruker skannerklasse i java

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

redusereFunc : Den assosiative reduksjonsfunksjonen.

invReduceFunc : Det omvendte av ovennevnte reduserer funksjon. Dette er nødvendig for effektiv databehandling av innkommende og utgående batcher. Ved hjelp av denne funksjonen trekkes verdien av batchene som er utgående fra den akkumulerte verdien av ovennevnte reduseringsfunksjon. For eksempel, hvis vi beregner summen av innkommende verdier for de respektive tastene, vil vi for de utgående batchene trekke fra verdiene for de respektive tastene (forutsatt at de er tilstede i den gjeldende batchen, ellers ignorere).

vinduVarighet : Enheter av tid for gruppering av batchene, dette skal være et multiplum av batchintervallet.

slideDuration : Enheter for beregning, dette skal være et multiplum av batchintervallet. skillevegger : Partisjoneringsenheten som skal brukes til å lagre den resulterende DStream. For mer informasjon om partisjonering, les dette .

filterFunc : Funksjon for å filtrere ut utløpte nøkkelverdipar, dvs. for eksempel hvis vi ikke får en oppdatering for en nøkkel en gang, kan det være lurt å fjerne den.

Her er en program å telle ordene som kommer fra en stikkontaktstrøm. Vi har brukt en overbelastet versjon av funksjonen ovenfor med et vinduintervall på 4 sekunder og et lysbildeintervall på 2 sekunder.

I den neste bloggen min vil jeg skrive om full øktsporing og kontrollpoenging.

Har du spørsmål til oss? Vennligst nevn det i kommentarfeltet, så kommer vi tilbake til deg.

Relaterte innlegg:

Distribuert caching med kringkastingsvariabler