Che cosa è Apache Spark? La piattaforma big data che ha schiacciato Hadoop

Apache Spark defined

Apache Spark è un framework di elaborazione dati in grado di eseguire rapidamente attività di elaborazione su set di dati molto grandi e può anche distribuire attività di elaborazione dati su più computer, da solo o in tandem con altri strumenti di calcolo distribuito. Queste due qualità sono fondamentali per i mondi dei big data e dell’apprendimento automatico, che richiedono il marshalling di una potenza di calcolo enorme per crunch attraverso grandi archivi di dati., Spark prende anche alcuni degli oneri di programmazione di queste attività dalle spalle degli sviluppatori con un’API facile da usare che astrae gran parte del lavoro grugnito del calcolo distribuito e dell’elaborazione dei big data.

Dalle sue umili origini nell’AMPLab di U. C. Berkeley nel 2009, Apache Spark è diventato uno dei principali framework di elaborazione distribuita di Big data al mondo. Spark può essere distribuito in vari modi, fornisce collegamenti nativi per i linguaggi di programmazione Java, Scala, Python e R e supporta SQL, streaming di dati, apprendimento automatico ed elaborazione di grafici., Lo troverai utilizzato da banche, società di telecomunicazioni, società di giochi, governi e tutti i principali giganti tecnologici come Apple, Facebook, IBM e Microsoft.

Architettura Apache Spark

A livello fondamentale, un’applicazione Apache Spark è costituita da due componenti principali: un driver, che converte il codice dell’utente in più attività che possono essere distribuite tra i nodi di lavoro, e gli esecutori, che girano su quei nodi ed eseguono le attività loro assegnate. È necessaria una qualche forma di gestore di cluster per mediare tra i due.,

Fuori dalla scatola, Spark può essere eseguito in una modalità cluster standalone che richiede semplicemente il framework Apache Spark e una JVM su ogni macchina nel cluster. Tuttavia, è più probabile che tu voglia approfittare di un sistema di gestione delle risorse o dei cluster più robusto per occuparti dell’allocazione dei lavoratori su richiesta. Nell’azienda, questo normalmente significa in esecuzione su Hadoop YARN (questo è il modo in cui le distribuzioni Cloudera e Hortonworks eseguono i lavori Spark), ma Apache Spark può anche essere eseguito su Apache Mesos, Kubernetes e Docker Swarm.,

Se si cerca una soluzione gestita, Apache Spark può essere trovato come parte di Amazon EMR, Google Cloud Dataproc e Microsoft Azure HDInsight. Databricks, la società che impiega i fondatori di Apache Spark, offre anche la piattaforma di analisi unificata Databricks, che è un servizio gestito completo che offre cluster Apache Spark, supporto per lo streaming, sviluppo integrato di notebook basato sul Web e prestazioni di I/O cloud ottimizzate su una distribuzione Apache Spark standard.

Apache Spark costruisce i comandi di elaborazione dei dati dell’utente in un grafico aciclico diretto, o DAG., Il DAG è il livello di pianificazione di Apache Spark; determina quali attività vengono eseguite su quali nodi e in quale sequenza.

Spark vs. Hadoop: perché usare Apache Spark?

Vale la pena sottolineare che Apache Spark vs. Apache Hadoop è un po ‘ un termine improprio. Troverete Spark incluso nella maggior parte delle distribuzioni Hadoop in questi giorni. Ma a causa di due grandi vantaggi, Spark è diventato il quadro di scelta durante l’elaborazione di big data, superando il vecchio paradigma MapReduce che ha portato Hadoop alla ribalta.

Il primo vantaggio è la velocità., Il motore di dati in memoria di Spark significa che può eseguire attività fino a cento volte più velocemente di MapReduce in determinate situazioni, in particolare se confrontato con lavori a più stadi che richiedono la scrittura dello stato su disco tra le fasi. In sostanza, MapReduce crea un grafico di esecuzione a due stadi costituito da mappatura e riduzione dei dati, mentre il DAG di Apache Spark ha più fasi che possono essere distribuite in modo più efficiente. Anche i lavori Apache Spark in cui i dati non possono essere completamente contenuti nella memoria tendono ad essere circa 10 volte più veloci della loro controparte MapReduce.,

Il secondo vantaggio è l’API Spark compatibile con gli sviluppatori. Per quanto sia importante l’accelerazione di Spark, si potrebbe sostenere che la cordialità dell’API Spark è ancora più importante.

Spark Core

Rispetto a MapReduce e ad altri componenti Apache Hadoop, l’API di Apache Spark è molto amichevole per gli sviluppatori, nascondendo gran parte della complessità di un motore di elaborazione distribuito dietro semplici chiamate di metodo., L’esempio canonico, questo è come quasi il 50 linee di MapReduce codice per contare le parole in un documento può essere ridotto a poche righe di Apache Spark (qui mostrato in Scala):

fornendo associazioni di lingue popolari per l’analisi dei dati come il Pitone e R, oltre enterprise-friendly Java e Scala, Apache Scintilla, permette a tutti da sviluppatori di applicazioni di dati scienziati e sfruttare la sua scalabilità e velocità in modo accessibile.,

Spark RDD

Al centro di Apache Spark c’è il concetto di Resilient Distributed Dataset (RDD), un’astrazione di programmazione che rappresenta una collezione immutabile di oggetti che possono essere suddivisi in un cluster di calcolo. Le operazioni sugli RDD possono anche essere suddivise in tutto il cluster ed eseguite in un processo batch parallelo, portando a un’elaborazione parallela veloce e scalabile.

Gli RDD possono essere creati da semplici file di testo, database SQL, negozi NoSQL (come Cassandra e MongoDB), bucket Amazon S3 e molto altro ancora., Gran parte dell’API Spark Core è costruita su questo concetto RDD, consentendo la mappa tradizionale e ridurre le funzionalità, ma anche fornendo supporto integrato per unire set di dati, filtraggio, campionamento e aggregazione.

Spark viene eseguito in modo distribuito combinando un processo core del driver che divide un’applicazione Spark in attività e le distribuisce tra molti processi executor che eseguono il lavoro. Questi esecutori possono essere scalati su e giù come richiesto per le esigenze dell’applicazione.,

Spark SQL

Originariamente conosciuto come Shark, Spark SQL è diventato sempre più importante per il progetto Apache Spark. È probabilmente l’interfaccia più comunemente utilizzata dagli sviluppatori di oggi durante la creazione di applicazioni. Spark SQL si concentra sull’elaborazione di dati strutturati, utilizzando un approccio dataframe preso in prestito da R e Python (in Panda). Ma come suggerisce il nome, Spark SQL fornisce anche un’interfaccia conforme a SQL2003 per l’interrogazione dei dati, portando la potenza di Apache Spark agli analisti e agli sviluppatori.,

Oltre al supporto SQL standard, Spark SQL fornisce un’interfaccia standard per la lettura e la scrittura su altri datastore, tra cui JSON, HDFS, Apache Hive, JDBC, Apache ORC e Apache Parquet, tutti supportati immediatamente. Altri negozi popolari-Apache Cassandra, MongoDB, Apache HBase e molti altri—possono essere utilizzati estraendo connettori separati dall’ecosistema dei pacchetti Spark.,

Selezionare alcune colonne di un dataframe è semplice come questa riga:

citiesDF.select("name”, "pop”)

Utilizzando l’interfaccia SQL, si registra dataframe come una tabella temporanea, dopo di che, si può eseguire query SQL:

citiesDF.createOrReplaceTempView("cities”)
spark.sql("SELECT name, pop FROM cities”)

Dietro le quinte, Apache Scintilla utilizza una query optimizer chiamato Catalizzatore che esamina i dati e le query in modo da produrre un efficiente piano di query per la località di dati e di calcolo che esegue i calcoli necessari in tutto il cluster. Nel Apache Spark 2.,x era, l’interfaccia SQL Spark di dataframe e dataset (essenzialmente un dataframe tipizzato che può essere controllato in fase di compilazione per la correttezza e sfruttare ulteriori ottimizzazioni di memoria e calcolo in fase di esecuzione) è l’approccio consigliato per lo sviluppo. L’interfaccia RDD è ancora disponibile, ma consigliata solo se le tue esigenze non possono essere risolte all’interno del paradigma Spark SQL.

Spark 2.4 ha introdotto una serie di funzioni integrate di ordine superiore per manipolare direttamente array e altri tipi di dati di ordine superiore.,

Spark MLlib

Apache Spark raggruppa anche librerie per l’applicazione di tecniche di machine learning e analisi dei grafici ai dati su larga scala. Spark MLlib include un framework per la creazione di pipeline di apprendimento automatico, che consente una facile implementazione di estrazione di funzionalità, selezioni e trasformazioni su qualsiasi set di dati strutturati. MLlib viene fornito con implementazioni distribuite di algoritmi di clustering e classificazione come k-means clustering e foreste casuali che possono essere scambiati dentro e fuori dalle pipeline personalizzate con facilità., I modelli possono essere addestrati dai data scientist in Apache Spark utilizzando R o Python, salvati utilizzando MLlib e quindi importati in una pipeline basata su Java o Scala per l’uso in produzione.

Si noti che mentre Spark MLlib copre l’apprendimento automatico di base tra cui classificazione, regressione, clustering e filtraggio, non include strutture per la modellazione e la formazione di reti neurali profonde (per i dettagli vedere la recensione di InfoWorld Spark MLlib). Tuttavia, le pipeline di apprendimento profondo sono in lavorazione.,

Spark GraphX

Spark GraphX viene fornito con una selezione di algoritmi distribuiti per l’elaborazione di strutture di grafici tra cui un’implementazione del PageRank di Google. Questi algoritmi utilizzano l’approccio RDD di Spark Core alla modellazione dei dati; il pacchetto GraphFrames consente di eseguire operazioni di grafico su dataframes, tra cui l’utilizzo dell’ottimizzatore Catalyst per le query sui grafici.

Spark Streaming

Spark Streaming è stata una delle prime aggiunte ad Apache Spark che l’ha aiutata a guadagnare trazione in ambienti che richiedevano un’elaborazione in tempo reale o quasi in tempo reale., In precedenza, batch e stream processing nel mondo di Apache Hadoop erano cose separate. Dovresti scrivere il codice MapReduce per le tue esigenze di elaborazione batch e utilizzare qualcosa come Apache Storm per i tuoi requisiti di streaming in tempo reale. Ciò porta ovviamente a basi di codice disparate che devono essere mantenute sincronizzate per il dominio dell’applicazione nonostante siano basate su framework completamente diversi, che richiedono risorse diverse e coinvolgono diversi problemi operativi per l’esecuzione.,

Spark Streaming ha esteso il concetto di Apache Spark di elaborazione batch in streaming suddividendo il flusso in una serie continua di microbatch, che potrebbero quindi essere manipolati utilizzando l’API di Apache Spark. In questo modo, il codice nelle operazioni batch e streaming può condividere (principalmente) lo stesso codice, in esecuzione sullo stesso framework, riducendo così il sovraccarico sia dello sviluppatore che dell’operatore. Vincono tutti.,

Una critica dell’approccio Spark Streaming è che il microbatching, in scenari in cui è richiesta una risposta a bassa latenza ai dati in arrivo, potrebbe non essere in grado di eguagliare le prestazioni di altri framework in grado di streaming come Apache Storm, Apache Flink e Apache Apex, che utilizzano tutti un metodo di streaming puro piuttosto che microbatches.

Structured Streaming

Structured Streaming (aggiunto in Spark 2.x) è quello di Spark Streaming ciò che Spark SQL era per le API Spark Core: un’API di livello superiore e un’astrazione più semplice per la scrittura di applicazioni., Nel caso di Structure Streaming, l’API di livello superiore consente essenzialmente agli sviluppatori di creare dataframe e dataset di streaming infiniti. Risolve anche alcuni punti dolenti molto reali con cui gli utenti hanno lottato nel framework precedente, in particolare per quanto riguarda le aggregazioni in tempo di eventi e la consegna tardiva dei messaggi. Tutte le query su flussi strutturati passano attraverso Catalyst query optimizer, e può anche essere eseguito in modo interattivo, consentendo agli utenti di eseguire query SQL contro i dati in diretta streaming.,

Structured Streaming originariamente si basava sullo schema di microbatching di Spark Streaming per la gestione dei dati di streaming. Ma in Spark 2.3, il team di Apache Spark ha aggiunto una modalità di elaborazione continua a bassa latenza allo streaming strutturato, consentendo di gestire le risposte con latenze a partire da 1 ms, il che è molto impressionante. A partire da Spark 2.4, l’elaborazione continua è ancora considerata sperimentale. Mentre lo streaming strutturato è basato sul motore SQL Spark, lo streaming continuo supporta solo un insieme limitato di query.,

Lo streaming strutturato è il futuro delle applicazioni di streaming con la piattaforma, quindi se stai costruendo una nuova applicazione di streaming, dovresti usare lo streaming strutturato. Le API di streaming Spark legacy continueranno ad essere supportate, ma il progetto consiglia il porting su Structured Streaming, poiché il nuovo metodo rende la scrittura e il mantenimento del codice di streaming molto più sopportabile.

Deep Learning Pipelines

Apache Spark supporta deep learning tramite Deep Learning Pipelines., Utilizzando la struttura della pipeline esistente di MLlib, è possibile richiamare librerie di deep learning di livello inferiore e costruire classificatori in poche righe di codice, nonché applicare grafici TensorFlow personalizzati o modelli Keras ai dati in entrata. Questi grafici e modelli possono anche essere registrati come UDF SQL Spark personalizzati (funzioni definite dall’utente) in modo che i modelli di deep learning possano essere applicati ai dati come parte delle istruzioni SQL.

Apache Spark tutorial

Pronto a tuffarsi e imparare Apache Spark?, Consigliamo vivamente di Evan Heitman A Neandertal’s Guide to Apache Spark in Python, che non solo illustra le basi di come Apache Spark funziona in termini relativamente semplici, ma ti guida anche attraverso il processo di scrittura di una semplice applicazione Python che fa uso del framework. L’articolo è scritto dal punto di vista di uno scienziato dei dati, il che ha senso in quanto la scienza dei dati è un mondo in cui i big data e l’apprendimento automatico sono sempre più critici.,

Se stai cercando alcuni esempi di Apache Spark per darti un’idea di ciò che la piattaforma può fare e come lo fa, dai un’occhiata a Spark By {Examples}. C’è un sacco di codice di esempio qui per una serie di attività di base che costituiscono gli elementi costitutivi della programmazione Spark, in modo da poter vedere i componenti che compongono le attività più grandi che Apache Spark è fatto per.

Hai bisogno di andare più a fondo? DZone ha quello che si riferisce modestamente come la collezione completa di Apache Spark, che consiste in una serie di utili tutorial su molti argomenti di Apache Spark. Buon apprendimento!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Vai alla barra degli strumenti