2015-01-06 15 views
15

Sono un neofita del calcolo parallelo e sto appena iniziando a provare MPI e Hadoop + MapReduce su Amazon AWS. Ma sono confuso su quando usarne uno sull'altro.Hadoop MapReduce vs MPI (vs Spark vs Mahout vs Mesos) - Quando usarne uno sull'altro?

Per esempio, una regola comune di consigli pollice vedo possono essere riassunti come ...

  • Big dati, non iterativi, tolleranza di errore => MapReduce
  • Velocità, piccoli dati, iterativi, tipo non-Mapper-riduttore => MPI

ma poi, vedo anche implementazione di MapReduce su MPI (MR-MPI) che non prevede la tolleranza agli errori, ma seems to be più efficace su alcuni benchmark che MapReduce su Hadoop, e sembra gestire grande d ata usando la memoria out-of-core.

Al contrario, ci sono anche implementazioni MPI (MPICH2-YARN) su Hadoop Yarn di nuova generazione con il suo file system distribuito (HDFS).

Inoltre, sembra che ci sia disposizioni entro MPI (scatter-gather, Checkpoint-Restart, ULFM e altri fault tolerance) che imitano diverse caratteristiche di MapReduce paradigma.

E come si adattano Mahout, Mesos e Spark?

Quali criteri possono essere utilizzati per decidere tra (o una combinazione di) Hadoop MapReduce, MPI, Mesos, Spark e Mahout?

+2

possibile dup di http://stackoverflow.com/questions/1530490/what-are-some-scenarios-for-which-mpi-is-a-better-fit-than-mapreduce?rq=1? –

+2

Ho letto quella q & a prima di postare la mia. Lì, vedrai che per ogni risposta inviata, ci sono commenti che dicono che la risposta non è accurata. Prendi la prima risposta, per esempio. Ci sono implementazioni di elementi finiti su MapReduce [1] (http://milindb.tumblr.com/post/8782567841/mapreduce-pregel-and-fem-framework), [2] (http://ieeeplpl.eeee.org/ XPL/login.jsp? tp = & arnumber = 6188175 & url = http% 3A% 2F% 2Fieeexplore.ieee.org% 2Fxpls% 2Fabs_all.jsp% 3Farnumber% 3D6188175). – crackjack

+0

Dopo aver posto questa domanda, mi sono imbattuto in alcune altre opzioni (da aggiungere alla confusione) - come Akka, che sembrano non essere limitate a scenari "ovviamente paralleli" come MapReduce, pur essendo fault tolerant e hanno binding per Infiniband (TCP) ecc. – crackjack

risposta

8

Ci potrebbero essere dei buoni criteri tecnici per questa decisione ma non ho visto nulla di pubblicato su di esso. Sembra esserci un divario culturale in cui si capisce che MapReduce viene utilizzato per setacciare i dati negli ambienti aziendali mentre i carichi di lavoro scientifici utilizzano MPI. Ciò potrebbe essere dovuto alla sensibilità sottostante di questi carichi di lavoro alle prestazioni della rete. Ecco alcune riflessioni su come scoprirlo:

Molte implementazioni MPI moderne possono essere eseguite su più reti ma sono fortemente ottimizzate per Infiniband. Il caso d'uso canonico per MapReduce sembra essere in un gruppo di sistemi di merce "scatola bianca" collegati via ethernet. Una rapida ricerca su "MapReduce Infiniband" porta a http://dl.acm.org/citation.cfm?id=2511027 che suggerisce che l'uso di Infiniband in un ambiente MapReduce è una cosa relativamente nuova.

Quindi, perché dovresti eseguire un sistema altamente ottimizzato per Infiniband? È molto più costoso di Ethernet, ma ha una larghezza di banda superiore, una latenza inferiore e una migliore scalabilità in caso di alta contesa di rete (riferimento: http://www.hpcadvisorycouncil.com/pdf/IB_and_10GigE_in_HPC.pdf).

Se si dispone di un'applicazione che sarebbe sensibile a quegli effetti di ottimizzazione per Infiniband già cotti in molte librerie MPI, forse sarebbe utile per voi. Se la tua app è relativamente insensibile alle prestazioni della rete e trascorre più tempo su calcoli che non richiedono la comunicazione tra i processi, forse MapReduce è una scelta migliore.

Se si ha l'opportunità di eseguire benchmark, si può fare una proiezione su qualsiasi sistema disponibile per vedere quanto le prestazioni della rete possano essere migliorate. Prova a limitare la tua rete: downlock GigE a 100mbit o Infiniband QDR a DDR, ad esempio, traccia una linea attraverso i risultati e vedi se l'acquisto di un'interconnessione più veloce ottimizzata da MPI ti porterà dove vuoi andare.

6

Il link che hai postato su FEM stato fatto su MapReduce: http://ieeexplore.ieee.org/xpl/login.jsp?tp=&arnumber=6188175&url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all.jsp%3Farnumber%3D6188175

utilizza MPI. Lo afferma proprio lì in astratto. Hanno combinato il modello di programmazione di MPI (non imbarazzantemente parallelo) con HDFS per "mettere in scena" i dati per sfruttare la località dei dati.

Hadoop è puramente per calcoli paralleli imbarazzanti. Tutto ciò che richiede processi per organizzarsi e scambiare dati in modi complessi otterrà prestazioni schifose con Hadoop. Questo può essere dimostrato sia dal punto di vista della complessità algoritmica, sia dal punto di vista della misurazione.