Problème avec -libjars à hadoop
Je suis en train d'exécuter le travail de MapReduce sur Hadoop, mais je suis confronté à une erreur et je ne suis pas sûr de ce qui va mal. Je dois pas la bibliothèque de bocaux qui est requis par mon mappeur.
Je suis excuting suivantes dans le terminal:
hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop jar /home/hadoop/vardtst.jar -libjars /home/hadoop/clui.jar -libjars /home/hadoop/model.jar gutenberg ou101
et je suis l'Exception suivante:
à java.net.URLClassLoader$1.exécuter(URLClassLoader.java:202)
à java.de sécurité.AccessController.doPrivileged(Native method)
à java.net.URLClassLoader.findClass(URLClassLoader.java:190)
à java.lang.Chargeur de classe.loadClass(ClassLoader.java:306)
à java.lang.Chargeur de classe.loadClass(ClassLoader.java:247)
à java.lang.Classe.forName0(Native method)
à java.lang.Classe.forName(de la Classe.java:247)
au org.apache.hadoop.util.RunJar.principale(RunJar.java:149)
S'Il Vous Plaît Aider ..Merci
source d'informationauteur Shrish Bajpai
Vous devez vous connecter pour publier un commentaire.
Également intéressant de noter subtil mais important: la façon de spécifier d'autres Pots pour les machines virtuelles exécutant distribué carte de réduire les tâches et de la JVM de travail en cours d'exécution client est très différent.
-libjars fait des Bocaux uniquement disponible pour les machines virtuelles exécutant à distance de la carte et de réduire la tâche
De faire ces mêmes POT est à la disposition du client de la JVM (La JVM qui est créé lorsque vous exécutez l'hadoop pot de commande) nécessité de définir HADOOP_CLASSPATH variable d'environnement:
Voir: http://grepalex.com/2013/02/25/hadoop-libjars/
Une autre cause de la mauvaise -libjars comportement pourrait être dans la mauvaise mise en œuvre et l'initialisation de la coutume classe d'Emploi.
Voir: http://kickstarthadoop.blogspot.ca/2012/05/libjars-not-working-in-custom-mapreduce.html
Lorsque vous spécifiez le -LIBJARS avec Hadoop pot de commande. Assurez-vous d'abord que vous modifiez votre classe du pilote, comme indiqué ci-dessous:
Maintenant modifier votre "hadoop pot de commande comme indiqué ci-dessous:
Maintenant permet de comprendre ce qui se passe en dessous. Fondamentalement, nous sommes la manipulation de la nouvelle arguments de ligne de commande par la mise en œuvre de la L'Interface de l'OUTIL. ToolRunner est utilisé pour exécuter les classes implémentant l'interface de l'Outil. Il fonctionne en conjonction avec GenericOptionsParser pour analyser le générique hadoop arguments de ligne de commande et modifie la Configuration de l'Outil.
Au sein de notre Main() nous appelons ToolRunner.run(new Configuration(), new myDriverClass(), args) - cela va de l'Outil par Outil.exécuter(String[]), après l'analyse avec le générique arguments. Il utilise la Configuration donnée, ou en construit un, si c'est nul et puis définit l'Outil de configuration avec la version éventuellement modifiée de la conf.
Maintenant dans la méthode run, quand nous appelons getConf() nous obtenons la version modifiée de la Configuration. Donc, assurez-vous que vous avez la ligne ci-dessous dans votre code. Si vous mettez en œuvre tout le reste et font encore l'utilisation de la Configuration conf = new Configuration(), rien ne fonctionnerait.
J'ai trouvé la réponse, il jetait cause d'erreur qui me manquait sur la "main" nom de la classe dans la commande.
La bonne façon d'exécuter est:
hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop jar /home/hadoop/vardtst.jar VardTest -libjars /home/hadoop/clui.jar,/home/hadoop/model.jar gutenberg ou101
où VardTest est la classe contenant la méthode main ().
Grâce