Spark vs Hadoop: qual è il miglior framework per Big Data?



Questo post del blog parla di apache spark vs hadoop. Ti darà un'idea di quale sia il giusto framework per Big Data da scegliere in diversi scenari.

Inizierò questo blog Apache Spark vs Hadoop introducendo prima Hadoop e Spark per impostare il giusto contesto per entrambi i framework. Quindi, andando avanti, confronteremo entrambi i framework dei Big Data su diversi parametri per analizzare i loro punti di forza e di debolezza.Ma, qualunque sia il risultato del nostro confronto, dovresti sapere che sia Spark che Hadoop sono componenti cruciali di .

Apache Spark vs Hadoop: Introduzione a Hadoop

Hadoop è un framework che ti consente di memorizzare prima i Big Data in un ambiente distribuito in modo da poterli elaborare parallelamente. Ci sono fondamentalmente due componenti in Hadoop:





HDFS

HDFS crea un'astrazione di risorse, permettimi di semplificarla per te. Simile alla virtualizzazione, puoi vedere HDFS logicamente come una singola unità per l'archiviazione di Big Data, ma in realtà stai archiviando i tuoi dati su più nodi in modo distribuito. Qui hai un'architettura master-slave. In HDFS, Namenode è un nodo master e Datanodes sono slave.

NameNode

È il daemon master che mantiene e gestisce i DataNode (nodi slave). Registra i metadati di tutti i file archiviati nel cluster, ad es. posizione dei blocchi memorizzati, dimensione dei file, permessi, gerarchia, ecc. Registra ogni modifica che si verifica nei metadati del file system.



Ad esempio, se un file viene eliminato in HDFS, NameNode lo registrerà immediatamente nell'EditLog. Riceve regolarmente un Heartbeat e un report di blocco da tutti i DataNode nel cluster per garantire che i DataNode siano attivi. Mantiene un registro di tutti i blocchi in HDFS e in quali nodi sono memorizzati questi blocchi.

DataNode

Questi sono demoni slave che vengono eseguiti su ogni macchina slave. I dati effettivi vengono archiviati su DataNodes. Sono responsabili della gestione delle richieste di lettura e scrittura dai client. Sono anche responsabili della creazione di blocchi, dell'eliminazione dei blocchi e della replica degli stessi in base alle decisioni prese dal NameNode.

HDFS - Apache Spark vs Hadoop - EdurekaFILATO

YARN esegue tutte le attività di elaborazione allocando risorse e pianificando attività. Ha due demoni principali, ad es. ResourceManager e NodeManager .



ResourceManager

È un componente a livello di cluster (uno per ogni cluster) e viene eseguito sulla macchina master. Gestisce le risorse e pianifica le applicazioni in esecuzione su YARN.

NodeManager

È un componente a livello di nodo (uno su ogni nodo) e viene eseguito su ogni macchina slave. È responsabile della gestione dei contenitori e del monitoraggio dell'utilizzo delle risorse in ogni contenitore. Inoltre tiene traccia dell'integrità del nodo e della gestione dei registri. Comunica continuamente con ResourceManager per rimanere aggiornato. Quindi, puoi eseguire l'elaborazione parallela su HDFS usando MapReduce.

Per saperne di più su Hadoop, puoi leggere questo blog. Ora che siamo tutti pronti con l'introduzione di Hadoop, passiamo all'introduzione di Spark.

Apache Spark vs Hadoop: Introduzione ad Apache Spark

Apache Spark è un framework per l'analisi dei dati in tempo reale in un ambiente di elaborazione distribuito. Esegue calcoli in memoria per aumentare la velocità di elaborazione dei dati. È più veloce per l'elaborazione di dati su larga scala poiché sfrutta i calcoli in memoria e altre ottimizzazioni. Pertanto, richiede un'elevata potenza di elaborazione.

Resilient Distributed Dataset (RDD) è una struttura dati fondamentale di Spark. È una raccolta distribuita immutabile di oggetti. Ogni set di dati in RDD è suddiviso in partizioni logiche, che possono essere calcolate su diversi nodi del cluster. Gli RDD possono contenere qualsiasi tipo di oggetti Python, Java o Scala, comprese le classi definite dall'utente. I componenti Spark lo rendono veloce e affidabile. Apache Spark ha i seguenti componenti:

  1. Spark Core - Spark Core è il motore di base per l'elaborazione dati parallela e distribuita su larga scala. Inoltre, le librerie aggiuntive create in cima al core consentono diversi carichi di lavoro per streaming, SQL e machine learning. È responsabile della gestione della memoria e del ripristino degli errori, della pianificazione, della distribuzione e del monitoraggio dei lavori su un cluster e dell'interazione con i sistemi di archiviazione
  2. Spark Streaming - Spark Streaming è il componente di Spark che viene utilizzato per elaborare i dati di streaming in tempo reale. Pertanto, è un'utile aggiunta all'API Spark principale. Consente un'elaborazione del flusso ad alta velocità e tolleranza agli errori di flussi di dati in tempo reale
  3. Spark SQL : Spark SQL è un nuovo modulo in Spark che integra l'elaborazione relazionale con l'API di programmazione funzionale di Spark. Supporta l'esecuzione di query sui dati tramite SQL o tramite Hive Query Language. Per quelli di voi che hanno familiarità con RDBMS, Spark SQL rappresenterà una facile transizione dai vostri strumenti precedenti in cui potrete estendere i confini dell'elaborazione dei dati relazionali tradizionali.
  4. GraphX : GraphX ​​è l'API Spark per i grafici e il calcolo parallelo al grafico. Pertanto, estende Spark RDD con un Resilient Distributed Property Graph. Ad alto livello, GraphX ​​estende l'astrazione Spark RDD introducendo il Resilient Distributed Property Graph: un multigrafo diretto con proprietà associate a ciascun vertice e bordo.
  5. MLlib (Machine Learning): MLlib sta per Machine Learning Library. Spark MLlib viene utilizzato per eseguire l'apprendimento automatico in Apache Spark.

Come puoi vedere, Spark è dotato di librerie di alto livello, incluso il supporto per R, SQL, Python, Scala, Java ecc. Queste librerie standard aumentano le integrazioni senza soluzione di continuità in flussi di lavoro complessi. Oltre a questo, consente anche l'integrazione di vari set di servizi come MLlib, GraphX, SQL + Data Frames, Streaming services ecc. Per aumentare le sue capacità.

Per saperne di più su Apache Spark, puoi seguire questo blog. Ora il terreno è pronto per Apache Spark vs Hadoop. Andiamo avanti e confrontiamo Apache Spark con Hadoop su diversi parametri per comprenderne i punti di forza.

come convertire un double in un java int

Apache Spark vs Hadoop: parametri da confrontare

Prestazione

Spark è veloce perché ha l'elaborazione in memoria. Può anche utilizzare il disco per i dati che non rientrano tutti nella memoria. L'elaborazione in memoria di Spark offre analisi quasi in tempo reale. Ciò rende Spark adatto per sistemi di elaborazione delle carte di credito, apprendimento automatico, analisi della sicurezza e sensori Internet of Things.

Hadoop è stato originariamente configurato per raccogliere continuamente dati da più origini senza preoccuparsi del tipo di dati e archiviarli in un ambiente distribuito. MapReduce utilizza l'elaborazione batch. MapReduce non è mai stato creato per l'elaborazione in tempo reale, l'idea principale alla base di YARN è l'elaborazione parallela su set di dati distribuiti.

Il problema con il confronto tra i due è che eseguono l'elaborazione in modo diverso.

Facilità d'uso

Spark viene fornito con API user-friendly per Scala, Java, Python e Spark SQL. Spark SQL è molto simile a SQL, quindi diventa più facile per gli sviluppatori SQL apprenderlo. Spark fornisce anche una shell interattiva per gli sviluppatori per eseguire query ed eseguire altre azioni e avere un feedback immediato.

Puoi importare facilmente i dati in Hadoop utilizzando la shell o integrandoli con più strumenti come Sqoop, Flume ecc. YARN è solo un framework di elaborazione e può essere integrato con più strumenti come Hive e Pig. HIVE è un componente di data warehousing che esegue la lettura, la scrittura e la gestione di grandi set di dati in un ambiente distribuito utilizzando un'interfaccia simile a SQL. Puoi passare attraverso questo Ecosistema Hadoop blog per conoscere i vari strumenti che possono essere integrati con Hadoop.

Costi

Hadoop e Spark sono entrambi progetti open source Apache, quindi non ci sono costi per il software. Il costo è associato solo all'infrastruttura. Entrambi i prodotti sono progettati in modo tale da poter funzionare su hardware di base con un basso TCO.

Ora ti starai chiedendo in che modo sono diversi. L'archiviazione e l'elaborazione in Hadoop sono basate su disco e Hadoop utilizza quantità standard di memoria. Quindi, con Hadoop abbiamo bisogno di molto spazio su disco e dischi più veloci. Hadoop richiede inoltre più sistemi per distribuire l'I / O del disco.

A causa dell'elaborazione in memoria di Apache Spark, richiede molta memoria, ma può gestire una velocità e una quantità di disco standard. Poiché lo spazio su disco è una merce relativamente poco costosa e poiché Spark non utilizza l'I / O del disco per l'elaborazione, richiede invece grandi quantità di RAM per eseguire tutto in memoria. Pertanto, il sistema Spark incorre in costi maggiori.

Ma sì, una cosa importante da tenere a mente è che la tecnologia di Spark riduce il numero di sistemi richiesti. Ha bisogno di un numero significativamente inferiore di sistemi che costano di più. Quindi, ci sarà un punto in cui Spark riduce i costi per unità di calcolo anche con il requisito di RAM aggiuntivo.

Elaborazione dati

Esistono due tipi di elaborazione dei dati: elaborazione in batch e elaborazione in streaming.

Elaborazione batch vs elaborazione in streaming

Elaborazione in lotti : L'elaborazione in batch è stata fondamentale per il mondo dei big data. In termini più semplici, l'elaborazione batch funziona con volumi di dati elevati raccolti in un periodo. Nell'elaborazione batch i dati vengono prima raccolti e quindi i risultati elaborati vengono prodotti in una fase successiva.

come creare una stringa casuale in java

L'elaborazione in batch è un modo efficiente per elaborare set di dati statici di grandi dimensioni. In genere, eseguiamo l'elaborazione in batch per i set di dati archiviati. Ad esempio, calcolare il reddito medio di un paese o valutare il cambiamento nell'e-commerce nell'ultimo decennio.

Elaborazione del flusso : L'elaborazione dei flussi è la tendenza attuale nel mondo dei big data. Necessità del momento sono la velocità e le informazioni in tempo reale, che è ciò che fa l'elaborazione a vapore. L'elaborazione in batch non consente alle aziende di reagire rapidamente alle mutevoli esigenze aziendali in tempo reale, l'elaborazione in streaming ha visto una rapida crescita della domanda.

Tornando ad Apache Spark vs Hadoop, YARN è fondamentalmente un framework di elaborazione batch. Quando inviamo un lavoro a YARN, legge i dati dal cluster, esegue l'operazione e riscrive i risultati nel cluster. Quindi legge nuovamente i dati aggiornati, esegue l'operazione successiva e riscrive i risultati nel cluster e così via.

Spark esegue operazioni simili, ma usa l'elaborazione in memoria e ottimizza i passaggi. GraphX ​​consente agli utenti di visualizzare gli stessi dati come grafici e come raccolte. Gli utenti possono anche trasformare e unire grafici con Resilient Distributed Dataset (RDD).

Tolleranza agli errori

Hadoop e Spark forniscono entrambi la tolleranza agli errori, ma entrambi hanno un approccio diverso. Sia per HDFS che per YARN, i daemon master (rispettivamente NameNode e ResourceManager) controllano l'heartbeat dei daemon slave (rispettivamente DataNode e NodeManager). Se un demone slave ha esito negativo, i daemon master ripianificano tutte le operazioni in sospeso e in corso su un altro slave. Questo metodo è efficace, ma può aumentare notevolmente i tempi di completamento anche per operazioni con singolo guasto. Poiché Hadoop utilizza hardware di base, un altro modo in cui HDFS garantisce la tolleranza ai guasti è replicando i dati.

Come abbiamo discusso in precedenza, gli RDD sono i mattoni di Apache Spark. Gli RDD forniscono tolleranza agli errori a Spark. Possono fare riferimento a qualsiasi set di dati presente nel sistema di archiviazione esterno come HDFS, HBase, file system condiviso. Possono essere azionati parallelamente.

Gli RDD possono rendere persistente un set di dati in memoria tra le operazioni, il che rende le azioni future 10 volte molto più veloci. Se un RDD viene perso, verrà ricalcolato automaticamente utilizzando le trasformazioni originali. Ecco come Spark fornisce la tolleranza agli errori.

Sicurezza

Hadoop supporta Kerberos per l'autenticazione, ma è difficile da gestire. Tuttavia, supporta anche fornitori di terze parti come LDAP (Lightweight Directory Access Protocol) per l'autenticazione. Offrono anche la crittografia. HDFS supporta i permessi dei file tradizionali, nonché gli elenchi di controllo di accesso (ACL). Hadoop fornisce l'autorizzazione del livello di servizio, che garantisce che i clienti abbiano le giuste autorizzazioni per l'invio del lavoro.

Spark attualmente supporta l'autenticazione tramite un segreto condiviso. Spark può integrarsi con HDFS e può utilizzare ACL HDFS e autorizzazioni a livello di file. Spark può anche essere eseguito su YARN sfruttando le funzionalità di Kerberos.

Casi d'uso in cui Hadoop si adatta meglio:

  • Analisi dei dati di archivio. YARN consente l'elaborazione parallela di enormi quantità di dati. Parti di dati vengono elaborate parallelamente e separatamente su diversi DataNode e raccoglie i risultati da ciascun NodeManager.
  • Se non sono richiesti risultati immediati. Hadoop MapReduce è una soluzione valida ed economica per l'elaborazione in batch.

Casi d'uso in cui Spark si adatta meglio:

Analisi dei Big Data in tempo reale:

Analisi dei dati in tempo reale significa elaborare i dati generati dai flussi di eventi in tempo reale che arrivano alla velocità di milioni di eventi al secondo, ad esempio i dati di Twitter. La forza di Spark risiede nelle sue capacità di supportare lo streaming di dati insieme all'elaborazione distribuita. Questa è una combinazione utile che fornisce un'elaborazione dei dati quasi in tempo reale. MapReduce ha un tale vantaggio in quanto è stato progettato per eseguire l'elaborazione batch e distribuita su grandi quantità di dati. I dati in tempo reale possono ancora essere elaborati su MapReduce, ma la sua velocità non è affatto vicina a quella di Spark.

Spark afferma di elaborare i dati 100 volte più velocemente di MapReduce, mentre 10 volte più velocemente con i dischi.

Elaborazione del grafico:

La maggior parte degli algoritmi di elaborazione dei grafici come il page rank esegue più iterazioni sugli stessi dati e ciò richiede un meccanismo di passaggio dei messaggi. Abbiamo bisogno di programmare MapReduce esplicitamente per gestire tali iterazioni multiple sugli stessi dati. Approssimativamente, funziona in questo modo: leggere i dati dal disco e dopo una particolare iterazione, scrivere i risultati sull'HDFS e quindi leggere i dati dall'HDFS per l'iterazione successiva. Ciò è molto inefficiente poiché implica la lettura e la scrittura di dati sul disco che comporta operazioni di I / O pesanti e replica dei dati attraverso il cluster per la tolleranza agli errori. Inoltre, ogni iterazione di MapReduce ha una latenza molto elevata e l'iterazione successiva può iniziare solo dopo che il lavoro precedente è terminato completamente.

Inoltre, il passaggio dei messaggi richiede punteggi di nodi vicini per valutare il punteggio di un particolare nodo. Questi calcoli richiedono messaggi dai suoi vicini (o dati in più fasi del lavoro), un meccanismo che manca a MapReduce. Diversi strumenti di elaborazione dei grafici come Pregel e GraphLab sono stati progettati per soddisfare la necessità di una piattaforma efficiente per gli algoritmi di elaborazione dei grafici. Questi strumenti sono veloci e scalabili, ma non sono efficienti per la creazione e la post-elaborazione di questi complessi algoritmi a più fasi.

L'introduzione di Apache Spark ha risolto in larga misura questi problemi. Spark contiene una libreria di calcolo del grafico chiamata GraphX ​​che semplifica la nostra vita. Il calcolo in memoria insieme al supporto grafico integrato migliora le prestazioni dell'algoritmo di uno o due gradi rispetto ai tradizionali programmi MapReduce. Spark utilizza una combinazione di Netty e Akka per distribuire i messaggi tra gli esecutori. Diamo un'occhiata ad alcune statistiche che descrivono le prestazioni dell'algoritmo PageRank utilizzando Hadoop e Spark.

Algoritmi iterativi di apprendimento automatico:

Quasi tutti gli algoritmi di apprendimento automatico funzionano in modo iterativo. Come abbiamo visto in precedenza, gli algoritmi iterativi implicano colli di bottiglia di I / O nelle implementazioni di MapReduce. MapReduce utilizza attività a grana grossa (parallelismo a livello di attività) che sono troppo pesanti per gli algoritmi iterativi. Spark con l'aiuto di Mesos, un kernel di sistema distribuito, memorizza nella cache il set di dati intermedio dopo ogni iterazione ed esegue più iterazioni su questo set di dati memorizzato nella cache che riduce l'I / O e aiuta a eseguire l'algoritmo più velocemente in modo tollerante agli errori.

class __init__ python

Spark ha una libreria di machine learning scalabile incorporata chiamata MLlib che contiene algoritmi di alta qualità che sfruttano le iterazioni e produce risultati migliori rispetto alle approssimazioni di un passaggio talvolta utilizzate su MapReduce.

  • Elaborazione rapida dei dati. Come sappiamo, Spark consente l'elaborazione in memoria. Di conseguenza, Spark è fino a 100 volte più veloce per i dati nella RAM e fino a 10 volte per i dati nella memoria.
  • Elaborazione iterativa. Gli RDD di Spark consentono di eseguire diverse operazioni di mappatura in memoria, senza la necessità di scrivere set di dati temporanei su un disco.
  • Elaborazione quasi in tempo reale. Spark è uno strumento eccellente per fornire informazioni aziendali immediate. Questo è il motivo per cui Spark viene utilizzato nel sistema di streaming delle carte di credito.

'Apache Spark: A Killer o Savior of Apache Hadoop?'

La risposta a questo: Hadoop MapReduce e Apache Spark non sono in competizione tra loro. In effetti, si completano a vicenda abbastanza bene. Hadoop porta enormi set di dati sotto il controllo dei sistemi di merci. Spark fornisce elaborazione in memoria in tempo reale per i set di dati che lo richiedono. Quando combiniamo l'abilità di Apache Spark, ovvero l'elevata velocità di elaborazione, l'analisi avanzata e il supporto dell'integrazione multipla con il funzionamento a basso costo di Hadoop su hardware di base, offre i migliori risultati. Hadoop completa le capacità di Apache Spark. Spark non può sostituire completamente Hadoop, ma la buona notizia è che la domanda di Spark è attualmente ai massimi storici! Questo è il momento giusto per padroneggiare Spark e sfruttare al massimo le opportunità di carriera che ti si presentano. Inizia ora!

Hai domande per noi? Si prega di menzionarlo nella sezione commenti e ti risponderemo al più presto.

Se desideri imparare Spark e costruire una carriera nel dominio di Spark per eseguire l'elaborazione dei dati su larga scala utilizzando RDD, Spark Streaming, SparkSQL, MLlib, GraphX ​​e Scala con casi d'uso Real Life, dai un'occhiata al nostro interattivo, live-online Qui, che viene fornito con supporto 24 * 7 per guidarti durante il tuo periodo di apprendimento.