48 votes

Différence entre Fork/Join et Map/Reduce

Quelle est la principale différence entre Fork/Join et Map/Reduce ?

Diffèrent-ils par le type de décomposition et de distribution (données ou calcul) ?

42voto

tucuxi Points 5130

Une différence essentielle est que F-J semble être conçu pour fonctionner sur une seule VM Java, alors que M-R est explicitement conçu pour fonctionner sur un grand cluster de machines. Il s'agit de scénarios très différents.

F-J offre des possibilités de partitionner une tâche en plusieurs sous-tâches, d'une manière récursive ; plus de niveaux, possibilité de communication "inter-fourchettes" à ce stade, programmation beaucoup plus traditionnelle. Ne s'étend pas (du moins dans l'article) au-delà d'une seule machine. Idéal pour tirer parti de vos huit cœurs.

M-R ne fait qu'un seul grand fractionnement, les fractionnements mappés ne communiquant pas du tout entre eux, puis réduit tout ensemble. Un seul niveau, aucune communication inter-splits jusqu'à la réduction, et massivement évolutif. Idéal pour tirer parti de votre part du nuage.

10 votes

Plus précisément, F-J permet aux travailleurs de voler des sous-tâches dans les files d'attente des autres. Cela n'est pas possible si les threads des travailleurs sont sur des machines différentes (et n'ont donc pas de mémoire partagée).

2 votes

Selon le Entrée MapReduce sur Wikipedia En effet, M-R n'est pas nécessairement limité à un seul niveau de tâches bifurquées.

0 votes

Quelle est la différence entre fork/join et mapreduce en dehors du contexte de Java ?

17voto

Il existe un article scientifique entier sur le sujet, Comparaison entre Fork/Join et MapReduce .

L'article compare les performances, l'évolutivité et la programmabilité de trois paradigmes parallèles : fork/join, MapReduce et une approche hybride.

Ce qu'ils ont découvert, c'est que Java fork/join a une faible latence de démarrage et s'adapte bien aux petites entrées (<5MB), mais qu'il ne peut pas traiter des entrées plus importantes en raison des restrictions de taille de la mémoire partagée, des architectures à mémoire partagée et à nœud unique. D'autre part, MapReduce a une latence de démarrage significative (des dizaines de secondes), mais s'adapte bien à des entrées beaucoup plus grandes (>100MB) sur un cluster de calcul.

Mais il y a beaucoup plus à lire si vous êtes prêt à le faire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X