Trasformazioni stateful con windowing in Spark Streaming



Questo post del blog illustra le trasformazioni stateful con le finestre in Spark Streaming. Scopri tutto sul tracciamento dei dati tra batch utilizzando D-Stream all'avanguardia.

Contributo di Prithviraj Bose

In questo blog discuteremo il concetto di finestre delle trasformazioni stateful di Apache Spark.





Cos'è la trasformazione stateful?

Spark streaming utilizza un'architettura micro batch in cui i dati in ingresso sono raggruppati in micro batch chiamati Discretized Streams (DStreams) che funge anche da astrazione di programmazione di base. I DStream dispongono internamente di Resilient Distributed Datasets (RDD) e come risultato di questo standard RDD è possibile eseguire trasformazioni e azioni.



In streaming, se abbiamo un caso d'uso per tenere traccia dei dati tra batch, allora abbiamo bisogno di DStream di stato.

Ad esempio, possiamo tenere traccia dell'interazione di un utente in un sito web durante la sessione utente o possiamo monitorare un particolare hashtag di Twitter nel tempo e vedere quali utenti in tutto il mondo ne parlano.

Tipi di trasformazione statale.



I DStream con stato sono di due tipi: monitoraggio basato su finestre e monitoraggio completo della sessione.

Per il tracciamento stateful, tutti i dati in arrivo devono essere trasformati in coppie chiave-valore in modo che gli stati chiave possano essere tracciati tra batch. Questa è una precondizione.

Inoltre dovremmo anche abilitare il checkpoint, un concetto che discuteremo nei blog successivi.

> Tracciamento basato su finestra

Nel monitoraggio basato su finestre, i batch in entrata sono raggruppati in intervalli di tempo, ovvero batch di gruppo ogni 'x' secondi. Ulteriori calcoli su questi lotti vengono eseguiti utilizzando intervalli di diapositive.

Ad esempio, se l'intervallo della finestra = 3 secondi e l'intervallo della diapositiva = 2 secondi, tutti i dati in arrivo verranno raggruppati in batch ogni 3 secondi e i calcoli su questi batch avverranno ogni 2 secondi. In alternativa possiamo dire, fai calcoli ogni 2 secondi sui batch arrivati ​​negli ultimi 3 secondi.

spark-streaming-dstream-window

Nel diagramma sopra vediamo che i batch in entrata sono raggruppati ogni 3 unità di tempo (intervallo finestra) e i calcoli vengono eseguiti ogni 2 unità di tempo (intervallo diapositiva).
Nota: a differenza di Apache Flink, Apache Spark non ha il concetto di finestra a cascata, tutte le finestre sono scorrevoli.

FUOCO

Un'API popolare per le trasformazioni basate su finestre è

PairDStreamFunctions.reduceByKeyAndWindow .

Esistono diverse versioni sovraccaricate di questa API, vediamo quella che ha il maggior numero di parametri. Dopo questa spiegazione, il resto delle versioni sovraccaricate di questa API dovrebbe essere autoesplicativo.

Returns: Il DStream trasformato [(K, V)]

reduceFunc : La funzione di riduzione associativa.

invReduceFunc : L'inverso della funzione di riduzione sopra. Ciò è necessario per un calcolo efficiente dei batch in entrata e in uscita. Con l'aiuto di questa funzione il valore dei lotti in uscita viene sottratto dal valore accumulato della funzione di riduzione di cui sopra. Ad esempio, se stiamo calcolando la somma dei valori in entrata per le rispettive chiavi, allora per i batch in uscita sottraiamo i valori per le rispettive chiavi (a condizione che siano presenti nel batch corrente altrimenti ignora).

windowDuration : Unità di tempo per il raggruppamento dei batch, dovrebbe essere un multiplo dell'intervallo batch.

slideDuration : Unità di tempo per il calcolo, dovrebbe essere un multiplo dell'intervallo batch. partizioni : Il partitioner da utilizzare per archiviare il DStream risultante. Per ulteriori informazioni sul partizionamento, leggi Questo .

filterFunc : Funzione per filtrare le coppie chiave-valore scadute, ad esempio se non riceviamo un aggiornamento per una chiave per qualche tempo potremmo desiderare di rimuoverla.

Ecco un programma per contare le parole provenienti da un flusso di socket. Abbiamo utilizzato una versione sovraccarica della funzione precedente con un intervallo di finestra di 4 secondi e un intervallo di scorrimento di 2 secondi.

trim () in java

Nel mio prossimo blog scriverò del monitoraggio della sessione completa e del checkpoint.

Hai domande per noi? Per favore menzionalo nella sezione commenti e ti risponderemo.

Post correlati:

Caching distribuito con variabili di trasmissione