Spark in streaming | Una guida per principianti allo streaming Spark

Contenuti

Panoramica

  • Comprendi Spark Streaming e come funziona.
  • Scopri Windows su Spark Streaming con un esempio.

introduzione

Secondo IBM, il 60% di tutte le informazioni sensoriali perde valore in pochi millisecondi se non si agisce. Tenendo conto che il mercato dei Big Data e dell'analytics ha raggiunto il $ 125 miliardi e gran parte di questo sarà attribuito all'IoT in futuro, l'incapacità di sfruttare le informazioni in tempo reale si tradurrà in miliardi di dollari di perdite.

Esempi di alcune di queste applicazioni includono una società di telecomunicazioni, che calcola quanti dei suoi utenti hanno utilizzato WhatsApp negli ultimi 30 minuti, un rivenditore che tiene traccia del numero di persone che oggi hanno detto cose positive sui propri prodotti sui social media, o un'agenzia delle forze dell'ordine che cerca un sospetto utilizzando i dati sul traffico CCTV.

Esta es la razón principal por la que los sistemas de procesamiento de flujos como Spark Streaming definirán el futuro de la analitico in tempo reale. C'è anche una crescente necessità di analizzare sia i dati a riposo che i dati in movimento per alimentare le applicazioni., cosa rende i sistemi come Spark, possono fare entrambe le cose, essere ancora più attraente e potente. È un sistema per tutte le stagioni dei Big Data.

Imparerai come Spark Streaming non solo mantiene intatta la familiare API Spark, ma anche, underhood, utilizza RDD per l'archiviazione e la tolleranza ai guasti. Ciò consente ai professionisti di Spark di entrare nel mondo dello streaming fin dall'inizio.. Con quello in mente, andiamo subito al dunque.

1flyjc6u-qaq64ydllrzdww-8687944

Introducción a Spark Streaming | de Harshit Agarwal | Metà

Sommario

  • Apache Spark
  • Ecosistema Apache Spark
  • Spark in streaming: DStreams
  • Spark in streaming: contesto di trasmissione
  • Esempio: conteggio delle parole
  • Spark in streaming: Finestra
  • Una finestra basata su: conteggio delle parole
  • un (più efficiente) basato su finestre: conteggio delle parole
  • Spark in streaming: operazioni di uscita

Apache Spark

Apache Spark è un motore di elaborazione unificato e un set di librerie per l'elaborazione parallela dei dati su cluster di computer. Al momento di scrivere questo articolo, Spark è il motore open source più sviluppato per questo compito, rendendolo uno strumento standard per qualsiasi sviluppatore o data scientist interessato ai big data.

Spark supporta diversi linguaggi di programmazione ampiamente utilizzati (Pitone, Giava, Scala y R), include librerie per varie attività che vanno da SQL allo streaming al machine learning, e corre ovunque, desde una computadora portátil hasta un grappolo de miles de servidores. Ciò lo rende un sistema facile da avviare e scalare fino all'elaborazione di big data o su scala incredibilmente ampia.. Di seguito sono riportate alcune delle caratteristiche di Spark:

  • Motore veloce e multiuso per l'elaborazione di dati su larga scala

  • Spark può supportare in modo efficiente più tipi di calcoli

  • Può leggere / scrivere su qualsiasi sistema compatibile con Hadoop (ad esempio, HDFS)

  • Velocità: archiviazione dei dati in memoria per query iterative molto veloci
    • el sistema también es más eficiente que Riduci mappa para aplicaciones complejas que se ejecutan en el disco

    • fino a 40 volte più veloce di Hadoop

    • Acquisisci dati da molte fonti: Kafka, Twitter, HDFS, socket TCP

    • I risultati possono essere inviati ai file system, banche dati, pannelli dal vivo, ma non solo

7p88f2-2703904

Ecosistema Apache Spark

Di seguito sono riportati i componenti dell'ecosistema Apache Spark:

  • Nucleo Scintilla: funzionalità di base di Spark (pianificazione delle attività, gestione della memoria, ripristino dei guasti, interazione con i sistemi di archiviazione).
  • Spark SQL: pacchetto per lavorare con dati strutturati interrogati tramite SQL e HiveQL

  • Spark in streaming: un componente che consente l'elaborazione di flussi di dati in tempo reale (ad esempio, log files, messaggi di aggiornamento di stato)

  • MLLib: MLLib è una libreria di apprendimento automatico come Mahout. È basato su Spark e ha la capacità di supportare molti algoritmi di apprendimento automatico.
  • GraficoX: Per grafici e calcoli grafici, Spark ha il proprio motore di calcolo grafico, chiamato GraphX. È simile ad altri strumenti di elaborazione grafica o database ampiamente utilizzati, come Neo4j, Giraffe e molti altri database grafici distribuiti.

teoh7z-1472822

Spark in streaming: astrazioni

Spark Streaming ha un architettura micro batch come segue:

  • tratta la trasmissione come una serie di batch di dati

  • Nuovi batch vengono creati a intervalli di tempo regolari.

  • la dimensione degli intervalli di tempo è chiamata lotto rottura

  • l'intervallo batch è solitamente compreso tra 500 ms e ​​diversi secondi

opxh3o-6839897

Il valore di riduzione di ogni finestra viene calcolato in modo incrementale.

Sequenza discretizzata (DStream)

Corrente discretizzata oh DStream è l'astrazione di base fornita da Spark Streaming. Rappresenta un flusso continuo di dati, o il flusso di dati di input ricevuto dalla sorgente o il flusso di dati elaborati generato trasformando il flusso di input. Internamente, un DStream è rappresentato da una serie continua di RDD, che è l'astrazione di Spark di un set di dati distribuito e immutabile (guarda Guida alla programmazione Spark per ulteriori dettagli). Ogni RDD in un DStream contiene dati di un certo intervallo.

vqp083-1785373

  • Le trasformazioni RDD sono calcolate dal motore Spark
  • Le operazioni DStream nascondono la maggior parte di questi dettagli

  • Qualsiasi operazione applicata in un DStream si traduce in operazioni negli RDD sottostanti.

  • Il valore di riduzione di ogni finestra viene calcolato in modo incrementale.

an6nl4-5175935

Spark in streaming: contesto di trasmissione

È il punto di ingresso principale per la funzionalità di Spark Streaming. Fornisce i metodi utilizzati per creare DStreams da varie sorgenti di ingresso. Streaming Spark può essere creato fornendo un URL Spark Master e il nome dell'applicazione, o da una configurazione org.apache.spark.SparkConf, o desde un org.apache.spark.SparkContext esistente. È possibile accedere allo SparkContext associato utilizzando context.sparkContext.

Dopo aver creato e trasformato DStreams, lo streaming computing può essere avviato e interrotto utilizzando context.start() e, rispettivamente. context.awaitTermination() consente al thread corrente di attendere la terminazione del contesto entro stop() o per un'eccezione.

Per eseguire un'applicazione SparkStreaming, dobbiamo definire StreamingContext. SparkContext è specializzato per le applicazioni di streaming.

Il contesto di streaming in Java può essere definito come segue:

JavaStreamingContext ssc = new JavaStreamingContext(sparkConf, batchInterval);

dove:

  • Maestro è un URL del cluster Spark, Mesos o FILATO; per eseguire il codice in modalità locale, utilizzo “Locale[K]"Dove K> = 2 rappresenta il parallelismo

  • nome dell'applicazione è il nome della tua applicazione

  • intervallo batch Intervallo di tempo (in secondi) di ogni lotto

Una volta costruito, offrire due tipi di operazioni:

Alcuni esempi sono: carta geografica (), filtro () y riduciByKey ()

    • trasformazioni stateful: utilizza i dati dei lotti precedenti per calcolare i risultati del lotto corrente. Includi finestre scorrevoli, monitoraggio dello stato nel tempo, eccetera.

Nota che un contesto di streaming può essere avviato solo una volta e deve essere avviato dopo aver configurato tutti i DStream e le operazioni di output.

Fonti di dati di base

Le origini dati di base di Spark Streaming sono elencate di seguito:

  • Stream di file: Utilizzato per leggere dati da file su qualsiasi file system compatibile con HDFS API (vale a dire, HDFS, S3, NFS, eccetera.), puoi creare un DStream come:
    ... = streamingContext.fileStream<...>(directory);
  • Stream basati su ricevitori personalizzati: I DStream possono essere creati con flussi di dati ricevuti tramite ricevitori personalizzati, estendendo la classe del ricevitore
    ... = streamingContext.queueStream(coda di RDD)
  • Coda RDD come flusso: Per testare un'applicazione Spark Streaming con dati di test, puoi anche creare un DStream basato su una coda RDD, usando
    ... = streamingContext.queueStream(coda di RDD)

La maggior parte delle trasformazioni ha la stessa sintassi applicata agli RDD

Trasformazione

Senso

Carta geografica (funzione)

Restituisce un nuovo DStream passando ogni elemento del DStream sorgente attraverso una funzione func.

mappa piatta (funzione)

Simile alla mappa, ma ogni elemento di input può essere assegnato a 0 o più elementi di output.

filtro (funzione)

Restituisce un nuovo DStream selezionando solo i record dal DStream di origine dove func restituisce true.

Unione (altroStream)

Restituisce un nuovo DStream che contiene l'unione degli elementi del DStream sorgente e di otherDStream.

aderire (un altro flusso)

Quando vengono chiamati due DStream a due coppie (K, V) e (K, W), restituisce un nuovo DStream di (K, (V, W)) si accoppia con tutte le coppie di elementi per ogni chiave.

Esempio: conteggio delle parole

SparkConf sparkConf = nuova SparkConf()
.setMaster("Locale[2]").setAppName("WordCount");
JavaStreamingContext ssc = ...
JavaReceiverInputDStream<Corda> righe = ssc.socketTextStream( ... );
JavaDStream<Corda> parole = lines.flatMap(...);
Metodo JavaPairdStream<Corda, Numero intero> wordCounts = words
                                             .mapToPair(s -> nuovo Tuple2<>(S, 1))
                                             .reduceByKey((i1, i2) -> i1 + i2);

wordCounts.print();

Spark in streaming: Finestra

La funzione finestra più semplice è una finestra, che consente di creare un nuovo DStream, calculado aplicando los parametri de ventana al antiguo DStream. È possibile utilizzare qualsiasi operazione DSTREAM nel nuovo flusso, in modo da ottenere tutta la flessibilità che desideri.

I calcoli nelle finestre consentono di applicare trasformazioni su una finestra di dati scorrevole. Qualsiasi operazione di finestra deve specificare due parametri:

  • finestra lungo
    • La durata della finestra in secondi.
  • slittamento rottura
    • Intervallo in cui l'operazione della finestra viene eseguita in secondi.
    • Questi parametri devono essere multipli dell'intervallo batch.

i8chij-9683770

finestra(finestraLunghezza, slideInterval)

Restituisce un nuovo DStream calcolato in base ai batch nella finestra.

...
JavaStreamingContext ssc = ...
JavaReceiverInputDStream<Corda> linee = ...
JavaDStream<Corda> linesInWindow =
lines.window(WINDOW_SIZE, SLIDING_INTERVAL);
Metodo JavaPairdStream<Corda, Numero intero> wordCounts = linesInWindow.flatMap(SPLIT_LINE)
.mapToPair(s -> nuovo Tuple2<>(S, 1))
.reduceByKey((i1, i2) -> i1 + i2);
  • reduceByWindow (funzione, InvFunc, finestraLunghezza, slideInterval)
    • Restituisce una nuova sequenza di un singolo elemento, creato aggiungendo elementi nella sequenza durante un intervallo di scorrimento utilizzando funzione (che deve essere associativo).
    • Il valore di riduzione di ogni finestra viene calcolato in modo incrementale.
  • reduceByKeyAndWindow (funzione, InvFunc, finestraLunghezza, slideInterval)
    • Quando si chiama in un DStream di (K, V) Coppie, restituisce un nuovo DStream di (K, V) coppie in cui i valori per ogni chiave vengono aggiunti utilizzando la funzione di riduzione specificata funzione su lotti in una finestra scorrevole.

Per eseguire queste trasformazioni, dobbiamo definire una directory di checkpoint

Basato su finestre: conteggio delle parole

...
Metodo JavaPairdStream<Corda, Numero intero> wordCountPairs = ssc.socketTextStream(...)
.mappa piatta(x -> Arrays.asList(SPAZIO.SPLIT(X)).Iteratore())
.mapToPair(s -> nuovo Tuple2<>(S, 1));
Metodo JavaPairdStream<Corda, Numero intero> wordCounts = wordCountPairs
.reduceByKeyAndWindow((i1, i2) -> i1 + i2, WINDOW_SIZE, SLIDING_INTERVAL);
wordCounts.print();
wordCounts.foreachRDD(nuovo SaveAsLocalFile());

un (più efficiente) basato su finestre: conteggio delle parole

In una versione più efficiente, Il valore di riduzione di ogni finestra viene calcolato in modo incrementale.

Si noti che i checkpoint devono essere abilitati per utilizzare questa operazione.

...
ssc.checkpoint(LOCAL_CHECKPOINT_DIR);
...
Metodo JavaPairdStream<Corda, Numero intero> wordCounts = wordCountPairs.reduceByKeyAndWindow(
(i1, i2) -> i1 + i2,
(i1, i2) -> i1 - i2, WINDOW_SIZE, SLIDING_INTERVAL);

Spark in streaming: operazioni di uscita

Las operaciones de salida permiten que los datos de DStream se envíen a sistemas externos como una Banca dati o un sistema de archivos

Esci dall'operazione

Senso

Stampa()

Imprime los primeros diez elementos de cada lote de datos en un DStream en el nodo del controlador que ejecuta la aplicación.

salva come file di testo (prefisso, [suffisso])

Salva il contenuto di questo DStream come file di testo. Il nome del file in ogni intervallo batch viene generato in base al prefisso.

salva come file Hadoop (prefisso, [suffisso])

Salva il contenuto di questo DStream come file Hadoop.

salva come file oggetto (prefisso, [suffisso])

Salva il contenuto di questo DStream come SequenceFiles di oggetti Java serializzati.

foreachRDD (funzione)

Operatore di output generico che applica una funzione, funzione, ad ogni RDD generato dalla sequenza.

Riferimenti in linea
Documentazione Spark
Documentazione Spark

conclusione

Dovrebbe essere chiaro che Spark Streaming rappresenta un modo potente di scrivere applicazioni di streaming. Prendere un lavoro batch che stai già eseguendo e convertirlo in un lavoro di streaming senza quasi nessuna modifica al codice è semplice ed estremamente utile da un punto di vista ingegneristico se hai bisogno che questo lavoro interagisca strettamente con il resto della tua applicazione di elaborazione..

Ti consiglio di consultare le seguenti risorse di ingegneria dei dati per migliorare le tue conoscenze:

Se ti è piaciuto l'articolo, lascia un commento nella sezione commenti qui sotto.

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.