MapReduce è qualcosa di più di una semplice applicazione di divisione e conquista?


26

Dividere un problema in quelli più piccoli fino a quando i singoli problemi possono essere risolti in modo indipendente e quindi combinarli per rispondere alla domanda originale è noto come tecnica di progettazione dell'algoritmo di divisione e conquista . [Vedi: Introduzione agli algoritmi di CLR]

Recentemente, questo approccio per risolvere i problemi computazionali, specialmente nel dominio di insiemi di dati molto grandi, è stato indicato come MapReduce piuttosto che dividere e conquistare.

La mia domanda è la seguente: MapReduce è qualcosa di più di un framework proprietario che si basa sull'approccio di divisione e conquista, o ci sono dettagli che lo rendono unico sotto alcuni aspetti?


Dividi e conquista è una classe di algoritmi. MapReduce è un esempio di quella classe.
Martin Spamer,

Risposte:


28

Se stai chiedendo informazioni sull'architettura MapReduce, allora è solo una tecnica di divisione e conquista . Tuttavia, qualsiasi utile architettura MapReduce disporrà di montagne di altre infrastrutture in atto per "dividere", "conquistare" e infine "ridurre" il problema in modo efficiente. Con una distribuzione MapReduce di grandi dimensioni (migliaia di nodi di calcolo), questi passaggi per partizionare il lavoro, calcolare qualcosa e infine raccogliere tutti i risultati non sono banali. Cose come il bilanciamento del carico, il rilevamento del nodo morto, il salvataggio dello stato provvisorio (per problemi di lunga durata), sono problemi difficili da soli.


1
"Per" dividere "in modo efficiente," conquistare "e infine" ridurre "il problema" - questo è fuorviante: il passaggio "mappa" non richiede un risolutore D&C (poiché i dati sono strettamente indipendenti), puoi semplicemente distribuire blocchi di lavoro utilizzando una sorta di scheduler; la fase di riduzione richiede D&C.
Konrad Rudolph,

4
La parola "giusto" è fuorviante in questo contesto.

Come affermato, questa risposta non è semplicemente fuorviante, ma è assolutamente falsa. MapReduce è sicuramente non è "solo una tecnica divide et impera".
Jerry Coffin il

10

MapReduce è un framework per l'implementazione di algoritmi di divisione e conquista in modo estremamente scalabile , distribuendo automaticamente le unità di lavoro ai nodi in un cluster arbitrariamente grande di computer e gestendo automaticamente i guasti dei singoli nodi ridistribuendo l'unità di lavoro a un altro nodo.

Non è un concetto super sofisticato, ma un'infrastruttura molto utile.


10

MapReduce differisce dalla maggior parte dei sistemi di divisione e conquista in un modo abbastanza fondamentale, ma uno che è così semplice che molte persone quasi lo mancano. Il vero genio è nel taggare i risultati intermedi.

In un tipico sistema (precedente) di divisione e conquista, dividi il lavoro in serie, esegui i pacchetti di lavoro in parallelo e quindi unisci nuovamente i risultati di quel lavoro in serie.

In MapReduce, dividi il lavoro in serie, esegui i pacchetti di lavoro in parallelo e tagghi i risultati per indicare quali risultati vanno con quali altri risultati. L'unione è quindi seriale per tutti i risultati con lo stesso tag, ma può essere eseguita in parallelo per risultati con tag diversi.

Nella maggior parte dei sistemi precedenti, il passaggio di unione è diventato un collo di bottiglia per tutti tranne i compiti più banali. Con MapReduce può ancora essere se la natura delle attività richiede che tutte le fusioni vengano eseguite in serie. Se, tuttavia, l'attività consente un certo grado di fusione parallela dei risultati, MapReduce offre un modo semplice per sfruttare questa possibilità. La maggior parte degli altri sistemi fa una delle due cose: o eseguire tutta la fusione in serie solo perché potrebbe essere necessario per alcune attività, oppure definire staticamente la fusione parallela per una determinata attività. MapReduce ti fornisce dati sufficienti nella fase di fusione per pianificare automaticamente il più in parallelo possibile, garantendo comunque (supponendo di non aver commesso errori nella fase di mappatura) che venga mantenuta la coerenza.

Si noti inoltre che in MapReduce è implicito che tutti i passaggi possono essere ricorsivi, quindi potrei avere un passaggio di mappatura iniziale che suddivide una grande attività in 5 attività più piccole che possono essere eseguite in parallelo - ma ognuna di queste potrebbe (in girare) essere mappato su un numero di altre attività parallele più piccole, e così via.

Ciò porta a una struttura ad albero sia sulla mappatura che sui lati di riduzione per suddividere rapidamente un compito di grandi dimensioni in pezzi sufficienti per sfruttare molte macchine.


7

MapReduce non è semplicemente una tecnica di divisione e conquista, anche se sembra così in molti esempi.

Nella fase di mappatura puoi e spesso vuoi fare una relazione uno-a-molti. Quindi non stai semplicemente dividendo in casi.

Tra la mappa e la riduzione è presente (a seconda dell'implementazione) un ordinamento o un passaggio di hashing. L'efficienza di questa operazione è estremamente importante per i requisiti globali delle risorse. I dettagli sono invisibili al programmatore dell'applicazione, ma questo passaggio è il cuore del framework.

L'operazione di riduzione è un tipo di unione. Che può essere considerato come una conquista, ma in pratica tende ad essere "emettere dati per un uso successivo" o "salvare i dati in un archivio dati". (Nota, se hai set di dati di grandi dimensioni, vuoi davvero che tutto sia distribuito, inclusi input e risultati finali. Quindi un archivio di valori / chiavi distribuito ha senso sia come luogo per ottenere l'input sia per archiviare l'output.)

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.