Tout d'abord, allez sur la carte officielle:
puis faites une explication simple du processus (prenez le nombre de mots comme exemple):
les points impliqués ont un tampon en anneau
Description détaillée:
prenez le nombre de mots comme exemple, en supposant qu'il y a 5 cartes et 3 réduisent:
étape de la carte
1. Lorsque la tâche de carte est exécutée, ses données d'entrée proviennent du bloc HDFS Bien sûr, dans le concept MapReduce, la tâche de carte ne lit que le fractionnement. La correspondance entre le fractionnement et le bloc peut être plusieurs-à-un, et la valeur par défaut est un-à-un.
2. Après avoir exécuté le mappeur, nous avons appris que la sortie du mappeur est une telle paire clé / valeur: la clé est "bonjour" et la valeur est la valeur 1. Étant donné que la fin de la carte actuelle n'effectue que l'ajout de 1, le jeu de résultats est fusionné dans la tâche de réduction. Ce travail a 3 tâches de réduction. Quelle réduction devrait être accordée au "bonjour" actuel? Il doit être décidé maintenant.
- Partition (Partition)
MapReduce fournit l'interface de partitionnement. Son rôle est de déterminer quelle tâche de réduction la paire de données de sortie actuelle doit finalement être transmise en fonction de la clé ou de la valeur et du nombre de réducteurs. Par défaut, le hachage de clé est utilisé pour moduler le nombre de tâches de réduction. Le mode par défaut de modulo est juste de réduire la puissance de traitement du réducteur.Si l'utilisateur a besoin du partitionneur lui-même, il peut être personnalisé et réglé pour le travail.
Un split est divisé en 3 partitions.
Avant le tri, le tri effectue d'abord un tri secondaire, d'abord un tri en fonction de la partition à laquelle appartiennent les données, puis trie les données de chaque partition par clé . Le but de la partition est de diviser les enregistrements en différents réducteurs, dans l'espoir d'obtenir un équilibrage de charge, et les réducteurs ultérieurs liront leurs données correspondantes en fonction de la partition. Exécutez ensuite le combinateur (s'il est défini) , l'essence du combineur est également un réducteur, dont le but est de traiter d'abord les fichiers qui seront écrits sur le disque, de sorte que la quantité de données écrites sur le disque soit réduite.- Déversement (déversement) Le
côté Carte traitera les données d'entrée et générera un résultat intermédiaire. Ce résultat intermédiaire sera écrit sur le disque local au lieu de HDFS . La sortie de chaque carte est d'abord écrite dans un tampon de mémoire (tampon en anneau ). La fonction du tampon est de collecter les résultats de la carte en lots, réduisant ainsi l'impact du disque IO. Nos paires clé / valeur et les résultats de partition seront écrits dans le tampon. Bien sûr, avant d'écrire, les valeurs de clé et de valeur seront sérialisées dans un tableau d'octets. Lorsque les données écrites atteignent le seuil défini, le système démarre un thread pour écrire les données du tampon sur le disque. Ce processus est appelé déversement.
Cette écriture de débordement est effectuée par un thread distinct et n'affecte pas le thread qui écrit le résultat de la carte dans le tampon. Le thread d'écriture de débordement ne doit pas empêcher la sortie des résultats de la carte au démarrage, de sorte que le tampon entier a un pourcentage d'écriture de déversement. Ce ratio est de 0,8 par défaut.
Écrivez les données sur le disque local pour générer le fichier de déversement (le fichier de déversement est enregistré dans le répertoire spécifié par {mapred.local.dir} et sera supprimé une fois la tâche MapReduce terminée). - Fusionner (fusionner)
chaque tâche de carte peut générer plusieurs fichiers de déversement. Avant chaque tâche de carte, ces fichiers de déversement seront fusionnés en un seul fichier via un algorithme de fusion multidirectionnel . Cette opération est appelée fusion (les fichiers de déversement sont stockés dans le répertoire spécifié par {mapred.local.dir} et seront supprimés une fois la tâche de mappage terminée). Une carte finira par écraser un fichier.
À ce stade, le processus de lecture aléatoire de la carte est terminé.
réduire l'étape
Le shuffle du côté réduit comprend principalement trois étapes, copier, trier (fusionner) et réduire.
- Copier copie d'
abord le fichier de sortie généré par le côté Carte vers le côté Réduire, mais comment chaque réducteur sait-il quelles données il doit traiter? Lors du partitionnement côté carte, cela revient en fait à spécifier les données à traiter par chaque réducteur (la partition correspond au réducteur), de sorte que le réducteur n'a besoin que de copier les données dans la partition qui lui correspond lors de la copie des données Voilà. ** Chaque réducteur traitera une ou plusieurs partitions, mais vous devez d'abord copier les données dans la partition correspondante à partir de la sortie de chaque carte. - Fusionner (trier)
Copier les données seront d'abord placées dans le tampon de mémoire, la taille du tampon est plus flexible que le côté carte, elle est basée sur le paramètre de taille de tas de la JVM, car le réducteur d'étape de lecture aléatoire ne s'exécute pas, il devrait donc être le plus grand Une partie de la mémoire est utilisée par Shuffle .
Ce qui doit être souligné ici est: la
phase de fusion, également connue sous le nom de phase de tri, car le travail principal de cette phase est d'effectuer un tri de fusion. Les données copiées du côté Carte vers le côté Réduire sont ordonnées, elles conviennent donc parfaitement au tri par fusion.
Il existe trois formes de fusion: 1) mémoire vers mémoire 2) mémoire vers disque 3) disque vers disque. Le premier formulaire n'est pas activé par défaut.
Lorsque la quantité de données copiées dans la mémoire atteint un certain seuil, la fusion de la mémoire vers le disque démarre, c'est-à-dire que la deuxième méthode de fusion, similaire à la carte, est également un processus de remplacement . Si vous configurez un combinateur dans ce processus, il Activé , puis a généré un grand nombre de fichiers de remplacement sur le disque. Cette méthode de fusion a été exécutée jusqu'à ce qu'il n'y ait aucune donnée à la fin de la carte.
Ensuite, démarrez la troisième méthode de fusion de disque à disque pour générer le fichier final. - Après une réduction
continue de la fusion, un "fichier final" sera généré à la fin. Pourquoi ajouter des guillemets? Étant donné que ce fichier peut exister sur le disque, il peut également exister en mémoire (selon la taille des données). Pour nous, bien sûr, nous voulons qu'il soit stocké en mémoire et directement utilisé comme entrée pour le réducteur, mais par défaut, ce fichier est stocké sur le disque.
Ensuite, le réducteur s'exécute, ce qui produit la sortie finale de ce processus et l'écrit sur HDFS.