2011-05-17 1 views
1

Dans mon application, je veux créer autant de travaux réducteur que possible en fonction des touches. Maintenant, mon implémentation actuelle écrit toutes les clés et les valeurs dans un seul fichier de sortie (réducteur). Donc, pour résoudre ce problème, j'ai utilisé un partitionneur mais je ne peux pas appeler la classe. Le partitionneur doit être appelé après la tâche de sélection de carte et avant la tâche de réduction de sélection mais pas le code suivant:Comment appeler Partitioner dans Haoop v 0.21

public class MultiWayJoinPartitioner extends Partitioner<Text, Text> { 
@Override 
public int getPartition(Text key, Text value, int nbPartitions) { 
return (key.getFirst().hashCode() & Integer.MAX_VALUE) % nbPartitions; 
return 0; 
} 
} 

Ce code est-il correct pour partitionner les fichiers en fonction des clés et des valeurs et la sortie sera automatiquement transférée au réducteur?

+0

Avez-vous déjà eu ce travail? –

Répondre

0

Vous ne montrez pas tout votre code, mais il y a généralement une classe (appelée classe "Job" ou "MR") qui configure le mappeur, le réducteur, le partitionneur, etc., puis soumet le travail à hadoop. Dans cette classe, vous aurez un objet de configuration de travail qui a beaucoup de propriétés, dont l'un est le nombre de réducteurs. Définissez cette propriété sur le nombre que votre configuration hadoop peut gérer.

Une fois que le travail est configuré avec un nombre donné de réducteurs, ce nombre sera transmis à votre partition (ce qui semble correct, soit dit en passant). Votre partitionneur commencera à renvoyer le réducteur/partition approprié pour la paire clé/valeur. Voilà comment vous obtenez autant de réducteurs que possible.

Questions connexes