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) ?
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) ?
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.
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).
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.
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 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.