MapReduce est un modèle de programmation utilisé pour les opérations parallèles sur des ensembles de données à grande échelle (supérieurs à 1 To). Les concepts « Map » et « Reduce », qui sont leurs idées principales, sont empruntés aux langages de programmation fonctionnels, ainsi que des fonctionnalités empruntées aux langages de programmation vectorielle.
Cela facilite grandement aux programmeurs d'exécuter leurs propres programmes sur des systèmes distribués sans connaître la programmation parallèle distribuée. L'implémentation logicielle actuelle spécifie une fonction Map pour mapper un ensemble de paires clé-valeur dans un nouvel ensemble de paires clé-valeur, et spécifie une fonction de réduction simultanée pour garantir que toutes les paires clé-valeur mappées sont chacune d'elles partageant le même ensemble. de clés.
Principe de fonctionnement(Apprentissage recommandé : Tutoriel vidéo Java)
Processus d'exécution de MapReduce
L'image ci-dessus est l'organigramme donné dans le document. Tout commence à partir du programme utilisateur en haut. Le programme utilisateur est lié à la bibliothèque MapReduce et implémente la fonction Map et la fonction Reduction les plus élémentaires. L'ordre d'exécution sur la figure est marqué par des chiffres.
1. La bibliothèque MapReduce divise d'abord le fichier d'entrée du programme utilisateur en M parties (M est défini par l'utilisateur). Chaque partie fait généralement de 16 Mo à 64 Mo, comme indiqué sur le côté gauche de la figure, divisée. dans split0~4 ; puis utilisez fork pour copier le processus utilisateur sur d'autres machines du cluster.
2. Une copie du programme utilisateur est appelée maître et les autres sont appelées travailleurs. Le maître est responsable de la planification et de l'attribution des tâches (cartographier les tâches ou réduire les tâches) aux travailleurs inactifs. également être déterminé par l'utilisateur spécifié.
3. Le travailleur affecté au travail Map commence à lire les données d'entrée de la partition correspondante. Le nombre de travaux Map est déterminé par M et correspond à la répartition un à un du travail Map. clé à partir des données d'entrée. Paires de valeurs, chaque paire clé-valeur est transmise à la fonction map en tant que paramètre et les paires clé-valeur intermédiaires générées par la fonction map sont mises en cache en mémoire.
4. Les paires clé-valeur intermédiaires mises en cache seront régulièrement écrites sur le disque local et divisées en zones R. La taille de R est définie par l'utilisateur. À l'avenir, chaque zone correspondra à une réduction. travail ; ces L'emplacement de la paire clé-valeur intermédiaire sera notifié au maître, et le maître est responsable de transmettre les informations au travailleur Réduire.
5. Le maître informe le travailleur affecté à la tâche Réduire où se trouve la partition dont il est responsable (il doit y avoir plus d'un emplacement, et les paires clé-valeur intermédiaires générées par chaque tâche Map peuvent être mappées à toutes les R partitions différentes), une fois que le travailleur de réduction a lu toutes les paires clé-valeur intermédiaires dont il est responsable, il les trie d'abord afin que les paires clé-valeur avec la même clé soient rassemblées. Étant donné que différentes clés peuvent être mappées sur la même partition, c'est-à-dire sur la même tâche de réduction (qui comporte moins de partitions), un tri est nécessaire.
6. Le travailleur de réduction parcourt les paires clé-valeur intermédiaires triées. Pour chaque clé unique, il transmet la clé et la valeur associée à la fonction de réduction. La sortie générée par la fonction de réduction sera ajoutée à la sortie. de cette partition dans le fichier.
7. Lorsque toutes les tâches Map et Reduction sont terminées, le maître réveille le véritable programme utilisateur et l'appel de la fonction MapReduce renvoie le code du programme utilisateur.
Une fois toutes les exécutions terminées, la sortie MapReduce est placée dans les fichiers de sortie des partitions R (chacune correspondant à un travail de réduction). Les utilisateurs n'ont généralement pas besoin de fusionner ces fichiers R, mais les utilisent comme entrée dans un autre programme MapReduce pour le traitement. Pendant tout le processus, les données d'entrée proviennent du système de fichiers distribués (GFS) sous-jacent, les données intermédiaires sont placées dans le système de fichiers local et les données de sortie finales sont écrites dans le système de fichiers distribués (GFS) sous-jacent. Et nous devons prêter attention à la différence entre les tâches Map/Reduce et les fonctions Map/Reduce : les tâches Map traitent un fragment de données d'entrée et peuvent devoir appeler la fonction map plusieurs fois pour traiter chaque paire clé-valeur d'entrée ; clés intermédiaires d'une partition Paires de valeurs, au cours desquelles la fonction de réduction est appelée une fois pour chaque clé différente, et le travail Réduire correspond finalement à un fichier de sortie.
Pour plus d'articles techniques liés à Java, veuillez visiter la colonne Tutoriel de développement Java pour apprendre !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!