MapReduce diverge de la plupart des systèmes de division et de conquête d'une manière assez fondamentale, mais si simple que beaucoup de gens la manquent presque. Le vrai génie est de marquer les résultats intermédiaires.
Dans un système de division et de conquête classique (précédent), vous divisez le travail en série, exécutez des paquets de travail en parallèle, puis fusionnez à nouveau les résultats de ce travail en série.
Dans MapReduce, vous divisez le travail en série, exécutez des paquets de travail en parallèle et étiquetez les résultats pour indiquer quels résultats vont avec quels autres résultats. La fusion est alors en série pour tous les résultats avec la même balise, mais peut être exécutée en parallèle pour les résultats qui ont des balises différentes.
Dans la plupart des systèmes précédents, l'étape de fusion est devenue un goulot d'étranglement pour toutes les tâches sauf les plus triviales. Avec MapReduce, cela peut toujours être le cas si la nature des tâches nécessite que toutes les fusions soient effectuées en série. Si, cependant, la tâche permet un certain degré de fusion parallèle des résultats, alors MapReduce donne un moyen simple de tirer parti de cette possibilité. La plupart des autres systèmes font l'une des deux choses suivantes: soit exécutez toutes les fusions en série simplement parce que cela peut être nécessaire pour certaines tâches, soit définissez statiquement la fusion parallèle pour une tâche particulière. MapReduce vous donne suffisamment de données à l'étape de la fusion pour planifier automatiquement autant en parallèle que possible, tout en garantissant (en supposant que vous n'avez pas fait d'erreur dans l'étape de mappage) que la cohérence est maintenue.
Notez également que dans MapReduce, il est implicite que toutes les étapes peuvent être récursives, donc je pourrais avoir une étape de mappage initiale qui décompose une grosse tâche en 5 tâches plus petites qui peuvent être exécutées en parallèle - mais chacune d'entre elles pourrait (dans tourner) pour être mappé sur un certain nombre d'autres tâches parallèles plus petites, etc.
Cela conduit à une structure arborescente à la fois sur les côtés de cartographie et de réduction pour décomposer rapidement une tâche importante en suffisamment de morceaux pour tirer parti de nombreuses machines.