Chemin de sortie multiple (Java-Hadoop-MapReduce)


Je fais deux travaux MapReduce, et je veux que le deuxième travail puisse écrire mon résultat dans deux fichiers différents, dans deux répertoires différents. Je voudrais quelque chose de similaire à FileInputFormat.addInputPath(.. multiples , le chemin d'entrée) dans un sens, mais pour la sortie.

Je suis complètement nouveau sur MapReduce, et j'ai une spécificité pour écrire mon code dans Hadoop 0.21.0 J'utilise context.write(..) dans mon étape de réduction, mais je ne vois pas comment contrôler plusieurs chemins de sortie...

Merci pour votre temps !

Mon reduceCode de mon premier travail, pour vous montrer que je sais seulement comment sortir (il va dans a /../partie* fichier. Mais maintenant, ce que je voudrais, c'est pouvoir spécifier deux fichiers precises pour une sortie différente, en fonction de la clé):

public static class NormalizeReducer extends Reducer<LongWritable, NetflixRating, LongWritable, NetflixUser> {
    public void reduce(LongWritable key, Iterable<NetflixRating> values, Context context) throws IOException, InterruptedException {
        NetflixUser user = new NetflixUser(key.get());
        for(NetflixRating r : values) {
            user.addRating(new NetflixRating(r));
        }
        user.normalizeRatings();
        user.reduceRatings();
        context.write(key, user);
    }
}

EDIT: j'ai donc fait la méthode dans le dernier commentaire comme vous l'avez mentionné, Amar. Je ne sais pas si ça marche, j'ai d'autres problèmes avec mes HDFS, mais avant d'oublier mettons ici mes découvertes pour le bien de la civilisation :

Http://archive.cloudera.com/cdh/3/hadoop-0.20.2+228/api/org/apache/hadoop/mapreduce/lib/output/MultipleOutputs.html

  • MultipleOutputs N'agit PAS à la place de FormatOutputFormat. Vous définissez un chemin de sortie avec FormatOutputFormat, puis vous pouvez en ajouter beaucoup plus avec plusieurs MultipleOutputs.
  • Méthode addNamedOutput: Chaîne namedOutput est juste un mot qui décrit.
  • Vous définissez le chemin réellement dans la méthode write, la chaîne baseOutputPath arg.
Author: Hermes, 2013-04-09

1 answers

J'ai Donc fait la méthode dans le dernier commentaire comme vous l'avez mentionné, Amar. Je ne sais pas si ça marche, j'ai un autre problème avec mes HDFS, mais avant d'oublier mettons ici mes découvertes pour le bien de la civilisation:

Http://archive.cloudera.com/cdh/3/hadoop-0.20.2+228/api/org/apache/hadoop/mapreduce/lib/output/MultipleOutputs.html

MultipleOutputs N'agit PAS à la place de FormatOutputFormat. Vous définissez un chemin de sortie avec FormatOutputFormat, puis vous pouvez ajouter beaucoup plus avec plusieurs MultipleOutputs. Méthode addNamedOutput: Chaîne namedOutput est juste un mot qui décrit. Vous définissez le chemin réellement dans la méthode write, la chaîne baseOutputPath arg.

 2
Author: Hermes, 2013-05-18 01:43:01