Stateful Transformations met Windowing in Spark Streaming



Deze blogpost bespreekt stateful transformaties met windowing in Spark Streaming. Leer alles over het bijhouden van gegevens in batches met behulp van geavanceerde D-Streams.

Bijgedragen door Prithviraj Bose

In deze blog bespreken we het raamconcept van de stateful transformaties van Apache Spark.





Wat is stateful transformatie?

Spark-streaming maakt gebruik van een microbatch-architectuur waarbij de binnenkomende gegevens worden gegroepeerd in microbatches, Discretized Streams (DStreams) genaamd, die ook dienen als de basisprogrammering. De DStreams hebben intern Resilient Distributed Datasets (RDD) en als resultaat hiervan kunnen standaard RDD transformaties en acties worden uitgevoerd.



Als we bij streaming een use-case hebben om gegevens in batches bij te houden, hebben we geavanceerde DStreams nodig.

We kunnen bijvoorbeeld de interactie van een gebruiker op een website tijdens de gebruikerssessie volgen of we kunnen een bepaalde Twitter-hashtag in de loop van de tijd volgen en zien welke gebruikers over de hele wereld erover praten.

Soorten state-ful transformatie.



State-ful DStreams zijn van twee soorten: op venster gebaseerde tracking en volledige sessietracking.

wat is een naamruimte c ++

Voor stateful tracking moeten alle inkomende gegevens worden omgezet in sleutel-waardeparen, zodat de sleutelstatussen in batches kunnen worden gevolgd. Dit is een voorwaarde.

Verder moeten we ook checkpointing inschakelen, een concept dat we in de latere blogs zullen bespreken.

> Op vensters gebaseerde tracking

Bij op vensters gebaseerde tracking worden de inkomende batches gegroepeerd in tijdsintervallen, d.w.z. groepeer batches elke ‘x’ seconden. Verdere berekeningen op deze batches worden gedaan met behulp van dia-intervallen.

Als het vensterinterval bijvoorbeeld = 3 seconden en het dia-interval = 2 seconden, worden alle binnenkomende gegevens elke 3 seconden in batches gegroepeerd en worden de berekeningen op deze batches elke 2 seconden uitgevoerd. Als alternatief kunnen we zeggen: voer elke 2 seconden berekeningen uit op de batches die in de afgelopen 3 seconden zijn aangekomen.

spark-streaming-dstream-window

In het bovenstaande diagram zien we dat de inkomende batches om de 3 tijdseenheden (vensterinterval) zijn gegroepeerd en dat de berekeningen elke 2 tijdseenheden (dia-interval) worden uitgevoerd.
Opmerking: in tegenstelling tot Apache Flink heeft Apache Spark geen concept van een tuimelend venster, alle vensters schuiven.

BRAND

Een populaire API voor op vensters gebaseerde transformaties is

PairDStreamFunctions.reduceByKeyAndWindow .

Er zijn verschillende overbelaste versies van deze API, laten we eens kijken naar degene met het meeste aantal parameters. Na deze uitleg zouden de rest van de overbelaste versies van deze API voor zichzelf moeten spreken.

Retourneert: de getransformeerde DStream [(K, V)]

reduceFunc : De associatieve verkleiningsfunctie.

invReduceFunc : Het omgekeerde van de bovenstaande functie verminderen. Dit is nodig voor een efficiënte berekening van inkomende en uitgaande batches. Met behulp van deze functie wordt de waarde van de uitgaande batches afgetrokken van de geaccumuleerde waarde van de bovenstaande verminderingsfunctie. Als we bijvoorbeeld de som van de inkomende waarden voor de respectieve sleutels berekenen, zullen we voor de uitgaande batches de waarden voor de respectieve sleutels aftrekken (op voorwaarde dat ze aanwezig zijn in de huidige batch, anders negeren we).

windowDuration : Eenheden van tijd voor het groeperen van de batches, dit moet een veelvoud zijn van het batch-interval.

slideDuration : Eenheden van tijd voor berekening, dit moet een veelvoud zijn van het batch-interval. partities : De partitioner die moet worden gebruikt voor het opslaan van de resulterende DStream. Lees voor meer informatie over partitionering deze .

filterFunc : Functie om verlopen sleutel / waarde-paren uit te filteren, d.w.z. als we bijvoorbeeld een bepaalde tijd geen update voor een sleutel ontvangen, willen we deze misschien verwijderen.

Hier is een programma om de woorden te tellen die uit een stopcontactstroom komen. We hebben de overbelaste versie van de bovenstaande functie gebruikt met een vensterinterval van 4 seconden en een dia-interval van 2 seconden.

In mijn volgende blog zal ik schrijven over het volgen en checken van volledige sessies.

Heeft u een vraag voor ons? Vermeld het in het opmerkingengedeelte en we nemen contact met u op.

Gerelateerde berichten:

Gedistribueerde caching met uitzendvariabelen