Je peux voir dans mes travaux MapRévriter que la sortie de la partie réducteur est triée par la touche. P>
Donc, si j'ai défini le nombre de réducteurs à 10, le répertoire de sortie contiendrait 10 fichiers et chacun de ces fichiers de sortie a une donnée triée. P>
La raison pour laquelle je le mettez ici est que même si tous les fichiers ont triché des données, mais ces fichiers eux-mêmes ne sont pas triés .. Par exemple: il existe des scénarios où les fichiers Part-000 * ont commencé à partir de 0 et se terminent à Zzzz en supposant que j'utilise du texte comme clé. P>
J'assommerais que le fichier doit être trié, même dans les fichiers I.E Fichier 1 Devrait avoir une partie de fichier et la dernière partie du fichier - 00009 doit avoir des entrées avec ZZZZ ou ATLASEET> A P>
en supposant si j'ai tous les alphabets des touches distribuées de manière uniforme. P>
Quelqu'un pourrait-il jeter un peu de lumière pourquoi un tel comportement p>
4 Réponses :
Vous pouvez obtenir un fichier de tri globalement (ce que vous voulez essentiellement) en utilisant ces méthodes: p>
Écrivez un partitionneur personnalisé. Partionneur est la classe qui divise l'espace clé de MapReduce. Le partitionneur par défaut ( hashpartoner ) divise uniformément l'espace clé dans le nombre de réducteurs. Découvrez Cet exemple Exemple d'écriture d'un partitionneur personnalisé. P > li>
Utilisez Hadoop Pig / Hive pour faire Trier. P> Li> ol>
Dans la méthode 3, voulez-vous dire utiliser "ordre par" dans la ruche? N'est-il pas non plus implémenté par un seul réducteur? (Selon Ce lien ) qui est fondamentalement identique à la méthode 1.
Part-00000 {4,,7,11} Part-00001 {5,8,11} Part-00002 {3,6,9}
Commande de ruche par utilise un seul réducteur, vous pouvez donc utiliser Distribuer par / Trier par puis à partir de la table triée, vous pouvez insérer sur écraser la local à partir de la table - pour écrire les données dans un fichier p>
Toutes les paires de la valeur clé à partir d'une clé particulière atteindront un réducteur particulier. Cela se produira par les partitionnaires au niveau du mapper. Les combinaisons au niveau du mappeur agiront comme des réducteurs semi-réducteurs et envoient des valeurs d'une clé particulière à réducteur. hashpartitioner strong> est le meilleur partitionnement pour décider du nombre de réducteurs. P>
La sortie du réducteur sera un fichier unique comportant toute la sortie triée en fonction de la clé. P>
Utilisé pour définir la manière dont les touches de sortie de la carte sont triées. Cela fonctionne au niveau du mapper. Dans ce cas, nous pourrons contrôler la commande des valeurs avec les touches. Ce tri peut être effectué sur deux ou plusieurs valeurs de champ. P>
Jetez un coup d'œil à tri total de la commande & tri secondaire p>