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.