Stateful Transformations with Windowing in Spark Streaming



Det här blogginlägget diskuterar stateful transformations with windowing in Spark Streaming. Lär dig allt om spårning av data i flera satser med hjälp av statliga D-Streams.

Bidrag från Prithviraj Bose

I den här bloggen diskuterar vi fönsterbegreppet för Apache Sparks stateful transformations.





Vad är stateful transformation?

Spark streaming använder en mikrosatsarkitektur där inkommande data grupperas i mikrosatser som kallas Diskretiserade strömmar (DStreams) som också fungerar som grundläggande programmeringsabstraktion. DStreams har internt Resilient Distributed Datasets (RDD) och som ett resultat av denna standard kan RDD-transformationer och åtgärder göras.



Vid streaming om vi har ett användningsfall för att spåra data över satser så behöver vi statliga DStreams.

Vi kan till exempel spåra en användares interaktion på en webbplats under användarsessionen eller så kan vi spåra en viss Twitter-hashtag över tiden och se vilka användare över hela världen som pratar om det.

Typer av statlig omvandling.



Statliga DStreams är av två typer - fönsterbaserad spårning och fullständig sessionsspårning.

För stateful tracking bör all inkommande data omvandlas till nyckel-värdepar så att nyckeltillstånden kan spåras över partier. Detta är en förutsättning.

Vidare bör vi också möjliggöra checkpointing, ett koncept som vi kommer att diskutera i de senare bloggarna.

> Fönsterbaserad spårning

I fönsterbaserad spårning grupperas inkommande partier i tidsintervall, dvs gruppbatcher var x-sekund. Ytterligare beräkningar av dessa satser görs med glidintervall.

Till exempel om fönsterintervallet = 3 sekunder och bildintervallet = 2 sekunder, kommer all inkommande data att grupperas i satser var tredje sekund och beräkningarna på dessa satser kommer att ske varannan sekund. Alternativt kan vi säga, gör beräkningar varannan sekund på de partier som anlände de senaste 3 sekunderna.

spark-streaming-dstream-window

I ovanstående diagram ser vi att de inkommande satserna grupperas var tredje tidsenhet (fönsterintervall) och beräkningarna görs varannan tidsenhet (bildintervall).
Obs! Till skillnad från Apache Flink har Apache Spark inte ett begrepp att tumla fönster, alla fönster glider.

BRAND

Ett populärt API för fönsterbaserade transformationer är

PairDStreamFunctions.reduceByKeyAndWindow .

hur man skapar en dynamisk matris i java

Det finns flera överbelastade versioner av detta API, låt oss se den som har flest parametrar. Efter denna förklaring bör resten av de överbelastade versionerna av detta API vara självförklarande.

Returnerar: Den transformerade DStream [(K, V)]

reduceraFunc : Den associativa reduceringsfunktionen.

invReduceFunc : Det motsatta av ovanstående reducerar funktionen. Detta krävs för effektiv beräkning av inkommande och utgående partier. Med hjälp av denna funktion dras värdet på de utgående satserna från det ackumulerade värdet för ovanstående reduceringsfunktion. Till exempel, om vi beräknar summan av de inkommande värdena för respektive tangenter kommer vi för de utgående batcherna att subtrahera värdena för respektive tangenter (förutsatt att de finns i den aktuella batchen, annars ignoreras).

windowDuration : Enheter av tid för gruppering av batcherna, detta bör vara en multipel av batchintervallet.

slideDuration : Enheter av tid för beräkning, detta bör vara en multipel av batchintervallet. partitioner : Partitionern som ska användas för att lagra den resulterande DStream. Läs mer om partitionering detta .

filterFunc : Funktion för att filtrera bort utgångna nyckel-värdepar, dvs. om vi till exempel inte får en uppdatering för en nyckel någon gång kanske vi vill ta bort den.

Här är en program för att räkna orden som kommer från en sockelström. Vi har använt en överbelastad version av ovanstående funktion med ett fönsterintervall på 4 sekunder och ett bildintervall på 2 sekunder.

I min nästa blogg kommer jag att skriva om fullspårning och kontrollpunkt.

Har du en fråga till oss? Vänligen nämna det i kommentarfältet så återkommer vi till dig.

Relaterade inlägg:

Distribuerad caching med sändningsvariabler