Apache Spark DStream (Discretized Streams)

Giu 1, 2021
admin

Rimani aggiornato sulle ultime tendenze tecnologiche
Entra in DataFlair su Telegram!

Obiettivo

Questo tutorial Spark, ti guida attraverso Apache Spark DStream. Prima di tutto, vedremo cos’è Spark Streaming, poi, cos’è DStream in Apache Spark. In questo blog di Apache Spark vengono discusse anche le operazioni di Stream Discretized, cioè le trasformazioni Stateless e Stateful, le operazioni di Output, l’Input DStream e i Receivers.

Apache Spark DStream (Discretized Streams)

Apache Spark DStream (Discretized Streams)

Introduzione a DStream in Apache Spark

In questa sezione, impareremo a conoscere DStream. Quali sono il suo ruolo e la sua responsabilità in Spark Streaming? Include quali sono tutti i metodi inculcati per gestire lo streaming di dati dal vivo.
Come estensione di Apache Spark API, Spark Streaming è un sistema tollerante ai guasti e ad alta velocità. Elabora il flusso di dati in diretta. Spark Streaming prende l’input da varie fonti di input affidabili come Flume, HDFS e Kafka ecc. e poi invia i dati elaborati a filesystem, database o dashboard live. Il flusso di dati in ingresso viene diviso in lotti di dati e poi genera il flusso finale del risultato in lotti.

Spark DStream (Discretized Stream) è l’astrazione di base di Spark Streaming. DStream è un flusso continuo di dati. Riceve input da varie fonti come Kafka, Flume, Kinesis, o socket TCP. Può anche essere un flusso di dati generato dalla trasformazione del flusso di input. Nel suo nucleo, DStream è un flusso continuo di RDD (astrazione Spark). Ogni RDD in DStream contiene dati di un certo intervallo.

Ogni operazione su un DStream si applica a tutti gli RDD sottostanti. DStream copre tutti i dettagli. Fornisce allo sviluppatore un’API di alto livello per comodità. Di conseguenza, Spark DStream facilita il lavoro con i dati in streaming.

Spark Streaming offre proprietà di tolleranza agli errori per i DStream come per gli RDD. finché una copia dei dati di input è disponibile, può ricalcolare qualsiasi stato da esso utilizzando il lineage degli RDD. Per impostazione predefinita, Spark replica i dati su due nodi. Come risultato, Spark Streaming può sopportare fallimenti di un singolo lavoratore.

Apache Spark DStream Operations

Come RDD, anche Spark DStream supporta due tipi di operazioni: Trasformazioni e Operazioni di uscita

i. Trasformazione

Ci sono due tipi di trasformazione in DStream:

  • Trasformazioni senza stato
  • Trasformazioni statiche

a. Stateless Transformations

L’elaborazione di ogni lotto non ha dipendenza dai dati dei lotti precedenti. Le trasformazioni senza stato sono semplici trasformazioni RDD. Si applica su ogni lotto, cioè ogni RDD in un DStream. Include trasformazioni RDD comuni come map(), filter(), reduceByKey() etc.
Anche se queste funzioni sembrano applicarsi all’intero flusso, ogni DStream è una collezione di molti RDD (batch). Di conseguenza, ogni trasformazione apolide si applica ad ogni RDD.

Le trasformazioni apolidi sono in grado di combinare i dati di molti DStream in ogni fase temporale. Per esempio, i DStreams chiave/valore hanno le stesse trasformazioni relative ai join degli RDDs- cogroup(), join(), leftOuterJoin() etc.

Possiamo usare queste operazioni sui DStreams per eseguire operazioni RDD sottostanti su ogni batch.

Se le trasformazioni stateless non sono sufficienti, DStreams è dotato di un operatore avanzato chiamato transform(). transform() permette di operare sugli RDDs al loro interno. Il transform() permette a qualsiasi funzione RDD-to-RDD arbitraria di agire sul DStream. Questa funzione viene chiamata su ogni lotto di dati nel flusso per produrre un nuovo flusso.

b. Stateful Transformations

Utilizza i dati o i risultati intermedi dei lotti precedenti e calcola il risultato del lotto attuale. Le trasformazioni statiche sono operazioni su DStreams che tracciano i dati nel tempo. Quindi fa uso di alcuni dati da lotti precedenti per generare i risultati per un nuovo lotto.

I due tipi principali sono le operazioni a finestra, che agiscono su una finestra scorrevole di periodi di tempo, e updateStateByKey(), che è usato per tracciare lo stato attraverso gli eventi per ogni chiave (ad esempio, per costruire un oggetto che rappresenta ogni sessione utente).

Seguite questo link per leggere in dettaglio le DStream Transformations con gli esempi.

ii. Operazione di output

Una volta che otteniamo i dati dopo la trasformazione, l’operazione di output dei dati viene eseguita in Spark Streaming. Dopo il debug del nostro programma, usando l’operazione di output possiamo solo salvare il nostro output. Alcune delle operazioni di output sono print(), save() ecc. L’operazione di salvataggio prende la directory in cui salvare il file e un suffisso opzionale. La print() prende i primi 10 elementi di ogni batch del DStream e stampa il risultato.

Input DStream e Receiver

Input DStream è un DStream che rappresenta il flusso di dati in ingresso dalla sorgente di streaming. Ricevitore (Scala doc, Java doc) oggetto associato ad ogni oggetto DStream di input. Riceve i dati da una fonte e li memorizza nella memoria di Spark per l’elaborazione.

Spark Streaming fornisce due categorie di fonti di streaming integrate:

  • Fonti di base – Queste sono fonti che sono direttamente disponibili nell’API StreamingContext. Esempi: file system e connessioni socket.
  • Fonti avanzate – Queste fonti sono disponibili da classi di utilità extra come Kafka, Flume, Kinesis. Quindi, richiede il collegamento con dipendenze extra.

Per esempio:

  • Kafka: l’artefatto richiesto per Kafka è spark-streaming-kafka-0-8_2.11.
  • Flume: l’artefatto richiesto per Flume è dspark-streaming-flume_2.11.
  • Kinesis: l’artefatto richiesto per Kinesis è spark-streaming-kinesis-asl_2.11.

Crea molti ingressi DStream per ricevere più flussi di dati in parallelo. Crea più ricevitori che ricevono molti flussi di dati. Spark worker/executor è un compito di lunga durata. Così, occupa uno dei core che si associano all’applicazione Spark Streaming. Quindi, è necessario che l’applicazione Spark Streaming abbia abbastanza core per elaborare i dati ricevuti.

Conclusione

In conclusione, proprio come RDD in Spark, Spark Streaming fornisce un’astrazione di alto livello conosciuta come DStream. DStream rappresenta un flusso continuo di dati. Internamente, DStream è ritratto come una sequenza di RDD. Quindi, come RDD, possiamo ottenere DStream da DStream di input come Kafka, Flume ecc. Inoltre, la trasformazione potrebbe essere applicata sul DStream esistente per ottenere un nuovo DStream.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.