Hadoop Mapreduce plusieurs fichiers d'Entrée
J'ai donc besoin de deux fichiers en Entrée de mon mapreduce programme: de la Ville.dat et le Pays.dat
Dans ma méthode principale im analyse les arguments de ligne de commande comme ceci:
Path cityInputPath = new Path(args[0]);
Path countryInputPath = new Path(args[1]);
Path outputPath = new Path(args[2]);
MultipleInputs.addInputPath(job, countryInputPath, TextInputFormat.class, JoinCountryMapper.class);
MultipleInputs.addInputPath(job, cityInputPath, TextInputFormat.class, JoinCityMapper.class);
FileOutputFormat.setOutputPath(job, outputPath);
Si je suis maintenant en cours d'exécution de mon programme avec la commande suivante:
hadoop jar capital.jar org.myorg.Capital /user/cloudera/capital/input/City.dat /user/cloudera/capital/input/Country.dat /user/cloudera/capital/output
J'obtiens l'erreur suivante:
Exception in thread "main" org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory /user/cloudera/capital/input/Country.dat already exists
Pourquoi faut-il traiter ce que mon répertoire de sortie? J'ai spécifié un autre répertoire que le répertoire de sortie. Quelqu'un peut-il m'expliquer cela?
Pouvez-vous s'il vous plaît changer la question titre qu'il confond la personne qui va par le biais de la question pour la première fois.
OriginalL'auteur gaussd | 2012-11-05
Vous devez vous connecter pour publier un commentaire.
Basé sur la stacktrace, votre répertoire de sortie n'est pas vide. Donc le plus simple est effectivement de le supprimer avant de lancer la tâche:
En plus de cela, vos arguments en commençant par le nom de classe de votre classe principale
org.myorg.Capital
. C'est donc l'argument sur le zéro-ième de l'index. (Basé sur la stacktrace et le code que vous avez fournie).Fondamentalement, vous avez besoin de déplacer tous vos indices à droite:
N'oubliez pas de vider votre dossier de sortie si!
Aussi une petite astuce pour vous, vous pouvez séparer les fichiers avec virgule "," de sorte que vous pouvez le faire avec un seul appel comme ceci:
Et dans votre code java:
Si elle conduit à l'erreur exactement la même, vous n'êtes pas d'exécuter le code que vous avez fournis.
Autant que j'ai travaillé avec des problèmes, @gaussd est droit. org.myorg.Le Capital n'est pas le 0e élément dans args. Son juste de dire que "Commencer par la classe org.myorg.Capital dans la capital.jar fichier"..
OriginalL'auteur Thomas Jungblut
Ce qui se passe ici, c'est que le nom de la classe est réputé pour être le premier argument!
Par défaut, le premier non-argument est le nom de la classe à être invoqué. Complet nom de la classe doit être utilisée. Si l'-jar option est spécifiée, le premier non-argument est le nom d'une archive JAR contenant de la classe et des ressources f iles de l'application, avec le démarrage de la catégorie indiquée par le manifeste de la Classe d'en-tête.
Donc Ce que je voudrais vous suggérer de ajouter un Manifeste de fichiers de votre bocal où vous spécifiez la classe principale. Votre MANIFESTE.MF fichiers peuvent ressembler:
Et maintenant, votre commande devrait ressembler à:
Vous pouvez certainement il suffit de changer les valeurs de l'indice utilisé dans votre code, mais ce n'est pas conseillé de solution.
OriginalL'auteur Amar
pouvez-vous essayer ceci:
hadoop jar capital.jar /user/cloudera/capital/input /utilisateur/cloudera/capital/de sortie
Cela devrait lire tous les fichiers dans le répertoire d'entrée.
OriginalL'auteur Kishore Paila