web-dev-qa-db-fra.com

Mapreduce a-t-il quelque chose de plus qu'une simple application de division et de conquérir?

Diviser un problème aux plus petits jusqu'à ce que les problèmes individuels puissent être résolus de manière indépendante puis la combinant pour répondre à la question initiale est connue sous le nom de Diviser et conquérir design d'algorithme technique. [Voir: Introduction aux algorithmes de CLR]

Récemment, cette approche visant à résoudre des problèmes de calcul, en particulier dans le domaine des très grands ensembles de données, a été appelée Mapreduce plutôt que de diviser et de conquérir.

Ma question est la suivante: est mapreduce quelque chose de plus qu'un cadre exclusif qui s'appuie sur l'approche de la division et de la conquête, ou y a-t-il des détails qui le rendent unique à certains égards?

26
otto

Si vous posez des questions sur l'architecture MapReduce, il s'agit alors d'un Diviser et conquérir Technique. Cependant, toute architecture mapreduce utile aura des montagnes d'autres infrastructures en place pour "diviser" efficacement, "conquérir", et enfin "réduire" le problème du problème. Avec un grand déploiement MapReduce (1000 noeuds de calcul), ces étapes pour partitionner le travail, calculer quelque chose, puis collecter enfin tous les résultats sont non triviaux. Des choses telles que l'équilibrage de la charge, la détection des nœud morts, l'état d'épargne (pour des problèmes de longue durée), sont des problèmes difficiles.

28
brandx

Mapreduce diverge de la plupart des systèmes de division et de conquérir de manière assez fondamentale, mais il est si simple que beaucoup de gens le manquent presque. Le vrai génie est de marquer les résultats intermédiaires.

Dans un système de division et de conquéralisation typique (précédent), vous divisez l'opération en série, exécutez des paquets de travail en parallèle, puis fusionnez 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 les autres résultats. La fusion est ensuite en série pour tous les résultats avec la même balise, mais peut être exécuté en parallèle pour obtenir des résultats différents.

Dans la plupart des systèmes précédents, la fusion Step est devenue un goulot d'étranglement pour toutes les tâches les plus triviales. Avec MapReduce It CAN est toujours si la nature des tâches nécessite que toute la fusion soit faite en série. Si, toutefois, la tâche permet une certaine fusion parallèle des résultats, puis mapreduce donne un moyen simple de tirer parti de cette possibilité. La plupart des autres systèmes font l'une des deux choses: soit exécuter toutes la fusion en série juste parce qu'il pourrait nécessaire pour certaines tâches, ou bien définir statiquement parallèle la fusion pour une tâche particulière. MapReduce vous donne suffisamment de données à la fusion pour programmer automatiquement autant que possible parallèlement, tout en vous assurant que vous n'avez toujours pas fait des erreurs dans l'étape de mappage) que la cohérence est maintenue.

Notez également que, dans MapReduce, il est implicite que toutes les étapes puissent être récursives, donc je pourrais avoir une étape de mappage initiale qui enfreint une tâche importante dans 5 tâches plus petites pouvant être exécutées en parallèle - mais chacune de ces personnes (dans Tourner) Mettez mappé sur un certain nombre d'autres tâches parallèles plus petites, etc.

Cela conduit à une structure d'arbres sur la cartographie et les côtés réducteurs pour briser rapidement une tâche importante en suffisamment de morceaux pour profiter de nombreuses machines.

10
Jerry Coffin

MapReduce est un cadre pour la mise en œuvre d'algorithmes de division et de conquérir de manière extrêmement évolutive, en distribuant automatiquement des unités de travail aux nœuds dans un groupe arbitraire important d'ordinateurs et Manipulation automatique des échecs de nœuds individuels en redistribuant l'unité de travail à un autre nœud.

Ce n'est pas un concept super sophistiqué, mais une infrastructure très utile.

10
Michael Borgwardt

Mapreduce est non Simplement une technique de division et de conquérir, bien qu'elle a l'air de cette manière dans de nombreux exemples.

Dans l'étape de mappage, vous pouvez et voulez fréquemment faire une relation unique à plusieurs. Ainsi, vous ne divisez pas simplement dans des cas.

Entre la carte et réduire, il existe soit (en fonction de la mise en œuvre) une sorte ou une étape de hachage. L'efficacité de cette opération est extrêmement importante pour les besoins globaux des ressources. Ses détails sont invisibles pour le programmeur d'application, mais cette étape est le cœur du cadre.

La réduction de l'opération est un type de fusion. Ce qui peut être considéré comme une conquérir, mais dans la pratique tend à être soit "émettre des données pour une utilisation ultérieure" ou "enregistrer des données dans un magasin de données". (Remarque, si vous avez des ensembles de données volumineux, vous voulez vraiment que tout soit distribué, y compris les résultats de l'entrée et des résultats finaux. Donc, une clé de clé/valeur distribuée donne un sens à la fois comme un endroit pour obtenir l'entrée et pour stocker la sortie.)

7
btilly