Quali sono i casi d'uso di Apache Spark vs Hadoop


30

Con Hadoop 2.0 e YARN Hadoop presumibilmente non è più legato solo a soluzioni di riduzione delle mappe. Con questo progresso, quali sono i casi d'uso di Apache Spark vs Hadoop considerando entrambi in cima a HDFS? Ho letto la documentazione introduttiva di Spark, ma sono curioso di sapere se qualcuno ha riscontrato un problema più efficiente e più facile da risolvere con Spark rispetto a Hadoop.

Risposte:


40

Hadoop significa HDFS, YARN, MapReduce e molte altre cose. Vuoi dire Spark vs MapReduce ? Perché Spark funziona su / con Hadoop, che è piuttosto il punto.

Il motivo principale per utilizzare Spark è la velocità, e questo deriva dal fatto che la sua esecuzione può mantenere i dati in memoria tra le fasi piuttosto che persistere su HDFS dopo una mappa o una riduzione. Questo vantaggio è molto pronunciato per i calcoli iterativi, che hanno decine di fasi, ognuna delle quali tocca gli stessi dati. Qui è dove le cose potrebbero essere "100x" più veloci. Per semplici lavori simili a ETL a un passaggio per i quali è stato progettato MapReduce, in generale non è più veloce.

Un altro motivo per usare Spark è il suo linguaggio di alto livello più gradevole rispetto a MapReduce. Fornisce una vista funzionale simile alla programmazione che imita Scala, che è molto più bello della scrittura del codice MapReduce. (Sebbene sia necessario utilizzare Scala o adottare le API Java o Python leggermente meno sviluppate per Spark). Crunch e Cascading forniscono già un'astrazione simile sopra MapReduce, ma questa è ancora un'area in cui Spark è bello.

Infine Spark ha sottoprogetti ancora giovani ma promettenti per ML, analisi dei grafici e streaming, che espongono un'API simile e coerente. Con MapReduce, dovresti rivolgerti a diversi altri progetti per questo (Mahout, Giraph, Storm). È bello averlo in un unico pacchetto, anche se non ancora "cotto".

Perché non dovresti usare Spark? parafrasando me stesso:

  • Spark è principalmente Scala, con API Java con port; MapReduce potrebbe essere più amichevole e più nativo per gli sviluppatori basati su Java
  • Esiste più competenza MapReduce ora che Spark
  • Per i lavori paralleli dati, a un passaggio, simili a ETL per cui è stato progettato MapReduce, MapReduce è più leggero rispetto all'equivalente Spark
  • Spark è abbastanza maturo, così come lo è YARN ora, ma Spark-on-YARN è ancora abbastanza nuovo. I due potrebbero non essere ancora integrati in modo ottimale. Ad esempio, fino a poco tempo fa, non credo che Spark potrebbe chiedere a YARN le allocazioni in base al numero di core? Cioè: MapReduce potrebbe essere più facile da capire, gestire e ottimizzare

grazie per il chiarimento. Mantenere i dati in memoria sembra avere alcune implicazioni interessanti: leggerò un po 'di più il concetto di Resilient Distributed Dataset di Spark.
idclark,

3
+1 per una risposta davvero chiara e utile per molte persone che hanno fatto questa domanda, come me.
Vefthym,

3
Tieni presente che Sean Owen è coautore del nuovo libro di O'Reilly su Spark. :-)
sheldonkreger,

1

Non sono sicuro di YARN, ma penso che Spark faccia davvero la differenza rispetto a Hadoop (pubblicizzato come 100 volte più veloce) se i dati possono adattarsi perfettamente alla memoria dei nodi computazionali. Semplicemente perché evita l'accesso al disco rigido. Se i dati non si adattano alla memoria c'è ancora qualche guadagno a causa del buffering.


0

Buone informazioni @Sean Owen. Vorrei aggiungere un ulteriore. Spark può aiutare a costruire pipeline di dati unificate nell'architettura Lambda per i livelli Batch e Streaming con la possibilità di scrivere sul livello di servizio comune. È un grande vantaggio riutilizzare la logica tra batch e streaming. Anche lo streaming di algoritmi K-Means in Spark1.3 è un ulteriore vantaggio di ML oltre all'eccellente monitoraggio del lavoro e visualizzazioni dei processi in 1.4.


0

Sarebbe giusto confrontare Spark con MapReduce - il framework di elaborazione di Hadoop. Nella maggior parte dei casi, Spark può sovraperformare MapReduce. Il primo consente l'elaborazione dei dati in memoria, il che rende possibile l'elaborazione dei dati fino a 100 volte più veloce. Per questo motivo, Spark è un'opzione preferita se hai bisogno di approfondimenti rapidi, ad esempio, se necessario

  • eseguire analisi dei clienti, ad esempio confrontare il comportamento di un cliente con i modelli di comportamento di un particolare segmento di clienti e innescare determinate azioni;
  • gestire i rischi e prevedere vari possibili scenari;
  • rilevare frodi in tempo reale;
  • eseguire analisi di big data industriali e prevedere anomalie e guasti della macchina.

Tuttavia, MapReduce è bravo a elaborare set di dati davvero enormi (se stai bene con il tempo necessario per l'elaborazione). Inoltre, è una soluzione più economica, poiché MapReduce legge / scrive su un disco. E i dischi sono generalmente più economici della memoria.


-1

L'apprendimento automatico è un buon esempio di un tipo di problema in cui le soluzioni basate su Spark sono avanti di anni luce rispetto alle soluzioni basate su mapreduce, nonostante la giovane età dello spark-on-filato.


2
Non penso che sia vero, ma penso di sapere a cosa stai arrivando: in memoria funziona molto più velocemente per il calcolo iterativo e molta ML è iterativo.
Sean Owen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.