2015-09-14 17 views
11

Qualcuno può spiegare usando l'esempio di conteggio parole, perché Spark sarebbe più veloce di Map Reduce? rispostaPerché Spark è più veloce di Hadoop Map Riduci

+3

possibile duplicato di [Perché Spark è veloce quando il conteggio delle parole?] (Http://stackoverflow.com/questions/28850952/why-is-spark-fast-when-word-count) – zero323

+1

Un altro possibile duplicato [È il caching l'unico vantaggio della scintilla sulla mappa-ridurre?] (http://stackoverflow.com/questions/24705724/is-caching-the-only-advantage-of-spark-over-map-reduce) – zaxliu

risposta

15

di Bafna fornisce la memoria della storia, ma voglio aggiungere altri due fatti importanti: DAG e dell'ecosistema

  1. Spark utilizza "valutazione pigra" per formare un grafo orientato aciclico (DAG) di fasi di calcolo consecutive. In questo modo, il piano di esecuzione può essere ottimizzato, ad es. per ridurre al minimo la mescolanza di dati in giro. Al contrario, questo dovrebbe essere fatto manualmente in MapReduce sintonizzando ogni passo MR. (Sarebbe più facile capire questo punto se si ha familiarità con l'ottimizzazione del piano di esecuzione in RDBMS o l'esecuzione in stile DAG di Apache Tez)
  2. L'ecosistema Spark ha stabilito una pila versatile di componenti per gestire SQL, ML, Streaming, Attività di estrazione del grafico. Ma nell'ecosistema hadoop devi installare altri pacchetti per fare queste cose individuali.

e voglio aggiungere che, anche se i dati sono troppo grande per la memoria principale, è comunque possibile utilizzare scintilla scegliendo a persistere i tuoi dati su disco. Sebbene in questo modo si rinuncia ai vantaggi dell'elaborazione in memoria, è comunque possibile trarre vantaggio dall'ottimizzazione dell'esecuzione DAG.

Alcune risposte informative su Quora: here e here.

6

Penso che ci siano tre ragioni principali.

Le due principali ragioni derivano dal fatto che, in genere, non viene eseguito un singolo lavoro MapReduce, ma piuttosto un insieme di lavori in sequenza.

  1. Una delle principali limitazioni di MapReduce è che persiste il pieno set di dati di HDFS dopo aver eseguito ogni lavoro. Questo è molto costoso, perché comporta sia tre volte (per la replica) la dimensione del set di dati in I/O su disco e una quantità simile di I/O di rete. Spark ha una visione più olistica di una pipeline di operazioni. Quando l'output di un'operazione deve essere inserito in un'altra operazione, Spark passa i dati direttamente senza scrivere in memoria persistente. Questa è un'innovazione rispetto a MapReduce che proviene dalla carta Dryad di Microsoft e non è originale di Spark.

  2. L'innovazione principale di Spark è stata l'introduzione di un'astrazione di memorizzazione nella cache in memoria. Ciò rende Spark ideale per carichi di lavoro in cui più operazioni accedono agli stessi dati di input. Gli utenti possono richiedere a Spark di memorizzare nella cache i set di dati di input, in modo che non debbano essere letti dal disco per ogni operazione.

  3. E i lavori di Spark che si riducono a un singolo lavoro MapReduce? In molti casi anche questi funzionano più velocemente su Spark che su MapReduce. Il vantaggio principale che Spark ha qui è che può avviare le attività molto più velocemente. MapReduce avvia una nuova JVM per ogni attività, che può richiedere secondi con il caricamento di JAR, JIT, analisi XML di configurazione, ecc. Spark mantiene una JVM dell'esecutore in esecuzione su ciascun nodo, quindi avviare un'attività è semplicemente una questione di creare un RPC e passando un Runnable in un pool di thread, che contiene le singole cifre di millisecondi.

Infine, un comune malinteso probabilmente degno di nota è che in qualche modo scintilla corre interamente in memoria mentre MapReduce non è così. Questo semplicemente non è il caso. L'implementazione shuffle di Spark funziona in modo molto simile a quello di MapReduce: ogni record viene serializzato e scritto su disco sul lato mappa e poi recuperato e deserializzato sul lato di riduzione.

+1

La migliore risposta, ora con la seconda versione di Spark, puoi anche menzionare un motore di tungsteno. Utilizza le ottimizzazioni bytecode non disponibili in MapReduce. – MaxNevermind

Problemi correlati