Hadoop MapReduce: il est Possible de définir deux cartographes et les réducteurs dans une hadoop classe d'emploi?
J'ai deux classes java pour faire deux tâches mapreduce. Je peux les exécuter de façon indépendante. Les fichiers d'entrée sur lequel ils sont d'exploitation sont les mêmes pour les deux emplois. Donc ma question est de savoir si il est possible de définir deux mappeurs et deux réducteurs dans une classe java comme
mapper1.class
mapper2.class
reducer1.class
reducer2.class
et puis comme
job.setMapperClass(mapper1.class);
job.setmapperClass(mapper2.class);
job.setCombinerClass(reducer1);
job.setCombinerClass(reducer2);
job.setReducerClass(reducer1);
job.setReducerClass(reducer2);
Ces Méthodes set effectivement remplacer les précédentes, ou d'ajouter les nouvelles? J'ai essayé le code, mais il s'exécute la seule dernières catégories qui m'amène à penser qu'il remplace. Mais il doit y avoir une façon de faire de ce droit?
La raison pour laquelle je demande, c'est que je peux lire les fichiers d'entrée qu'une seule fois (un I/O) et ensuite deux cartes de réduire les emplois. Je voudrais aussi savoir comment je peux écrire les fichiers de sortie dans deux dossiers différents. Pour le moment, les deux emplois sont séparés et ont besoin d'une entrée et d'un répertoire de sortie.
OriginalL'auteur Bob | 2012-06-20
Vous devez vous connecter pour publier un commentaire.
Vous pouvez avoir plusieurs cartographes, mais dans un emploi, vous ne pouvez avoir qu'un réducteur. Et les fonctionnalités dont vous avez besoin sont
MultipleInput
,MultipleOutput
etGenericWritable
.À l'aide de
MultipleInput
, vous pouvez définir le mappeur et le correspondant inputFormat. Voici mon post sur la façon de l'utiliser.À l'aide de
GenericWritable
, vous pouvez séparer les différentes classes dans le réducteur. Voici mon post sur la façon de l'utiliser.À l'aide de
MultipleOutput
, vous pouvez la sortie des classes différentes dans le même réducteur.OriginalL'auteur Chun
Vous pouvez utiliser le MultipleInputs et MultipleOutputs classes, mais la sortie des deux mappeurs iront à la fois les réducteurs. Si le flux de données pour les deux mapper/réducteur paires sont vraiment indépendants l'un de l'autre puis les garder deux travaux distincts. Par la voie, MultipleInputs exécuter vos mappeurs avec le changement, mais les réductions devraient être modifiées afin d'utiliser MultipleOutputs
Les deux paires de M. partagent la même entrée, ce qui m'a fait penser à être en mesure de lire l'entrée qu'une seule fois. Les mappeurs de travailler avec des clés différentes. Cela signifie que les touches pour un mappeur seront différents de ceux de l'autre mappeur. La raison pour laquelle je pense est que je peux lire les fichiers d'entrée qu'une seule fois à les traiter dans deux différentes paires de Mme qui travail indepedently.
OriginalL'auteur Chris Gerken
Selon ma compréhension, qui découle de l'utilisation de la carte-réduire avec Hadoop streaming, vous pouvez enchaîner plusieurs cartographes et les réducteurs où l'on consomme de la sortie d'une autre
Mais vous ne devriez pas être en mesure d'exécuter différents contributeurs et les réducteurs simultanément. Les contributeurs eux-mêmes dépendent pas des blocs à traiter. Mappeur doit être instancié fondée sur cette décision et de ne pas la variété de mapper disponibles pour le travail.
[Edit: d'après votre commentaire]
Je ne pense pas que c'est possible. Vous pouvez la chaîne (où les réducteurs recevrez toutes les entrées de cartographes. Vous pouvez séquence mais vous ne pouvez pas exclusivement exécuter des ensembles indépendants de mapper et les réducteurs.
Je pense que ce que vous pouvez faire est, même si vous recevez à la fois les apports de la mappeurs dans les deux réducteurs, vous pouvez faire des mappeurs de sortie (K,V) est une façon telle que vous ne pouvait distinguer dans votre réducteurs qui mapper a été à l'origine de (K,V). De cette façon, les réducteurs peuvent processus sélectif (K,V) paires.
Cool, ne pense pas de cette possibilité. Mais comment puis-je séparer les fichiers de sortie, dire que je peux le gérer dans mon réducteur de mise en œuvre, j'ai besoin de quelque sorte, alors spécifier les clés qui sont écrites à l'endroit où.
Pas de Bob: Vous ne pouvez pas le faire. Ce que vous pouvez faire dans map1, map2 est de soumettre K,V K, (map1, V) de sorte que, dans réducteur de vous savez où les données proviennent de. Chaque réducteur crée son propre fichier de sortie de travail, de sorte que votre sortie est déjà séparés.
OriginalL'auteur pyfunc
La ChainMapper classe permet d'utiliser plusieurs Mappeur de classes au sein d'une seule Carte de la tâche. Par exemple, s'il vous plaît regardez ici.
OriginalL'auteur jeton