Dans la programmation de la carte, la phase de réduction comporte des sous-parties qui se mélangent, se trient et se réduisent. Le tri est une affaire coûteuse.
Quel est le but de la phase de réorganisation et de tri du réducteur dans la programmation de réduction de la mappe?
Tout d’abord, shuffling
est le processus de transfert de données des mappeurs aux réducteurs, c’est pourquoi je pense qu’il est évident que c’est nécessaire pour les réducteurs, car sinon ils ne pourraient avoir aucune entrée (ou entrée de chaque mappeur). Le brassage peut commencer même avant la fin de la phase de carte pour gagner du temps. C'est pourquoi vous pouvez voir un statut de réduction supérieur à 0% (mais inférieur à 33%) lorsque le statut de la carte n'est pas encore à 100%.
Sorting
permet au réducteur de gagner du temps, en l'aidant à distinguer facilement quand une nouvelle tâche de réduction doit commencer. Il commence simplement une nouvelle tâche de réduction, lorsque la clé suivante dans les données d'entrée triées est différente de la précédente, pour le dire simplement. Chaque tâche de réduction prend une liste de paires clé-valeur, mais elle doit appeler la méthode reduction () qui prend une entrée de liste de clés (valeur) et doit donc regrouper les valeurs par clé. C'est facile à faire, si les données d'entrée sont pré-triées (localement) dans la phase de mappage et simplement triées par fusion dans la phase de réduction (car les réducteurs obtiennent les données de nombreux mappeurs).
Partitioning
, que vous avez mentionné dans l'une des réponses, est un processus différent. Il détermine dans quel réducteur une paire (clé, valeur), sortie de la phase de carte, sera envoyée. Le partitionneur par défaut utilise un hachage sur les clés pour les distribuer aux tâches réduites, mais vous pouvez le remplacer et utiliser votre propre partitionneur personnalisé.
Ceci est une excellente source d’informations pour ces étapes: tutoriel Yahoo .
Une belle représentation graphique de ceci est la suivante (shuffle est appelé "copie" dans cette figure):
Notez que shuffling
et sorting
ne sont pas exécutés du tout si vous spécifiez des réducteurs nuls (setNumReduceTasks (0)). Ensuite, le travail MapReduce s'arrête à la phase de carte et la phase de carte n'inclut aucun type de tri (ainsi, même la phase de carte est plus rapide).
UPDATE: Puisque vous cherchez quelque chose de plus officiel, vous pouvez également lire le livre de Tom White "Hadoop: Le guide définitif". Ici est la partie intéressante de votre question.
Tom White est un partisan d’Apache Hadoop depuis février 2007 et est membre de la Fondation Apache Software. Je suppose donc que c’est assez crédible et officiel ...
Revenons sur les phases clés du programme Mapreduce.
La phase de la carte est effectuée par des mappeurs. Les mappeurs s'exécutent sur des paires clé/valeur d'entrée non triées. Chaque mappeur émet zéro, un ou plusieurs paires clé/valeur en sortie pour chaque paire clé/valeur en entrée.
La phase de combinaison est effectuée par des combineurs. Le combineur doit combiner des paires clé/valeur avec la même clé. Chaque combineur peut exécuter zéro, une fois ou plusieurs fois.
La phase de remaniement et de tri est effectuée par le framework. Les données de tous les mappeurs sont regroupées par clé, réparties entre les réducteurs et triées par clé. Chaque réducteur obtient toutes les valeurs associées à la même clé. Le programmeur peut fournir des fonctions de comparaison personnalisées pour le tri et un partitionneur pour le fractionnement des données.
Le partitionneur décide quel réducteur obtiendra une paire de valeurs de clé particulière.
Le réducteur obtient des paires clé/[liste de valeurs] triées, triées par clé. La liste de valeurs contient toutes les valeurs avec la même clé produite par les mappeurs. Chaque réducteur émet zéro, une ou plusieurs paires clé/valeur en sortie pour chaque paire clé/valeur en entrée .
Regardez ce javacodegeeks article de Maria Jurcovicova et mssqltips article de Datta pour une meilleure compréhension
Ci-dessous, l'image de safaribooksonline article
J'ai pensé à simplement ajouter quelques points manquants dans les réponses ci-dessus. Ce diagramme tiré de ici indique clairement ce qui se passe réellement.
Si je répète le vrai but de
Split: Améliore le traitement en parallèle en répartissant la charge de traitement sur différents nœuds (mappeurs), ce qui permet de gagner du temps de traitement.
Combiner: Réduit la sortie de chaque mappeur. Cela éviterait de passer du temps à déplacer les données d'un nœud à un autre.
Sort (Shuffle & Sort): Permet à l'exécution de planifier (générer/démarrer) de nouveaux réducteurs, où, tout en parcourant l'élément trié liste, chaque fois que la clé actuelle est différente de la précédente, elle peut engendrer un nouveau réducteur.
Certaines des exigences de traitement des données n'ont pas besoin d'être triées du tout. Syncsort avait fait le tri dans Hadoop enfichable. Here est un blog sympa de leur part sur le tri. Le processus de déplacement des données des mappeurs vers les réducteurs s'appelle le brassage. Vérifiez this article pour plus d'informations à ce sujet.
J'ai toujours supposé que c'était nécessaire, car la sortie du mappeur est l'entrée du réducteur. Elle a donc été triée en fonction de l'espace de clé puis divisée en compartiments pour chaque entrée de réducteur. Vous voulez vous assurer que toutes les mêmes valeurs d'une clé finissent dans le même seau allant au réducteur afin qu'elles soient réduites ensemble. Il est inutile d'envoyer K1, V2 et K1, V4 à différents réducteurs, car ils doivent être ensemble pour pouvoir être réduits.
Essayé de l'expliquer aussi simplement que possible
Le brassage est le processus par lequel les données intermédiaires des mappeurs sont transférées à 0,1 ou plusieurs réducteurs. Chaque réducteur reçoit 1 ou plusieurs clés et leurs valeurs associées en fonction du nombre de réducteurs (pour une charge équilibrée). De plus, les valeurs associées à chaque clé sont triées localement.
Ceci est une bonne lecture. J'espère que ça aide. En ce qui concerne le tri que vous préoccupez, je pense que cela concerne la fusion dans la dernière étape de Map. Lorsque l'opération de mappage est terminée et que le résultat doit être écrit sur le disque local, une fusion multiple est effectuée sur les fractionnements générés à partir de la mémoire tampon. Et pour une opération de fusion, il est utile de trier chaque partition en mode avancé.
Il n'y a que deux choses que MapReduce fait de manière NATIVELLE: Trier et (implémenté par tri) GroupBy évolutif.
La plupart des applications et des modèles de conception sur MapReduce sont construits sur ces deux opérations, fournies par shuffle et sort.
Eh bien, dans Mapreduce, il existe deux phrases importantes appelées Mapper et réducteur les deux sont trop importantes, mais Réducteur est obligatoire. Dans certains programmes, les réducteurs sont facultatifs. Maintenant, venez à votre question. Le brassage et le tri sont deux opérations importantes dans Mapreduce. Le premier cadre Hadoop prend des données structurées/non structurées et sépare les données en clé, valeur.
Maintenant, le programme Mapper sépare et organise les données en clés et valeurs à traiter. Génère les valeurs Key 2 et value 2. Ces valeurs doivent être traitées et réorganisées dans le bon ordre pour obtenir la solution souhaitée. Maintenant, cette lecture aléatoire et ce tri sont effectués dans votre système local (Framework s'en occupe) et sont traités dans un système local après un processus, ce qui permet de nettoyer les données dans un système local. D'accord
Ici, nous utilisons combineur et partition également pour optimiser ce processus de mélange et de tri. Après arrangement approprié, ces valeurs clés sont transmises à Reducer pour obtenir la sortie souhaitée du client. Enfin, Réducteur obtenir la sortie désirée.
K1, V1 -> K2, V2 (nous écrirons le programme Mapper), -> K2, V '(ici shuffle et soft les données) -> K3, V3 Générez la sortie. K4, V4.
Veuillez noter que toutes ces étapes sont uniquement des opérations logiques et ne modifient pas les données d'origine.
Votre question: quel est le but de la phase de réorganisation et de tri dans le réducteur dans la programmation de réduction de carte?
Réponse courte: Traiter les données pour obtenir le résultat souhaité. Le brassage consiste à agréger les données, à réduire le résultat attendu.