Comment faire pour exécuter un fichier jar dans hadoop?
J'ai créé un fichier jar en utilisant le fichier java de ce blog à l'aide de déclarations suivantes
javac -classpath /usr/local/hadoop/hadoop-core-1.0.3.jar -d /home/hduser/dir Dictionary.java
/usr/lib/jvm/jdk1.7.0_07/bin/jar cf Dictionary.jar /home/hduser/dir
Maintenant, j'ai essayé de lancer ce pot dans hadoop par hit et le procès de différentes commandes de
1hduser@ubuntu:~$ /usr/local/hadoop/bin/hadoop jar Dictionary.jar
De sortie:
Warning: $HADOOP_HOME is deprecated.
RunJar jarFile [mainClass] args...
2.hduser@ubuntu:~$ /usr/local/hadoop/bin/hadoop jar Dictionary.jar Dictionary
De sortie:
Warning: $HADOOP_HOME is deprecated.
Exception in thread "main" java.lang.ClassNotFoundException: Dictionary
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at org.apache.hadoop.util.RunJar.main(RunJar.java:149)
Comment puis-je exécuter le pot dans hadoop? J'ai le droit DFS Emplacements selon besoin par mon programme.
Le message d'erreur indique que la classe n'est pas trouvé. Assurez-vous que votre bocal a cette classe. Nouveau Dictionnaire de la classe aura besoin d'avoir une méthode main.
OriginalL'auteur Arihant | 2012-10-22
Vous devez vous connecter pour publier un commentaire.
J'ai été en mesure de reproduire votre problème. Le problème est de savoir où vous créez le pot.
Fondamentalement, le répertoire de l'emballage dans le pot est source de confusion, le fichier jar dans la localisation de la classe principale de fichier. Au lieu de cela, si vous essayez de faire :
c'est à dire package le fichier de classe spécifiquement dans le pot, puis exécutez:
Juste fonctionne très bien à condition que vous ayez une fonction principale dans votre classe appelé Dictionnaire.
Le problème, c'est lorsque vous créez un package complet d'un répertoire à l'intérieur d'un pot puis le pot doit aussi être conscient de la structure de répertoire pour localiser le fichier de classe. Pour cela, nous avons besoin d'avoir une hiérarchie de paquet pour définir l'emplacement de la classe. Donc, lorsque vous êtes d'emballage
/home/hduser/dir/
dans le pot, le pot n'est pas au courant de l'emplacement du fichier de classe qui est situé profondément à l'intérieur de cette structure de répertoire. Pour cela, vous devez ajouter un nom de package de votre.java
fichier en fonction de la structure de répertoire , par exemplehome.hduser.dir
et lors de l'exécution de lahadoop jar
commande spécifiez le nom de la classe avec la structure du package, par exemplehome.hduser.dir.Dictionary
.Je sais que la commande est: hadoop pot <jarFileName> <mainClassname> <AnyCommandLineArguements>. Quand je suis en tapant le <mainClassname> il est considéré comme un " <AnyCommandLineArguements> pourquoi est-ce arrivé? J'exporte mon fichier jar avec Eclipse comme Runnable JAR>>Copier les bibliothèques requises dans un sous dossier. S'Il Vous Plaît Aider.
J'ai eu la réponse stackoverflow.com/questions/43017899/...
OriginalL'auteur Abhishek Jain
Utiliser la commande ci-dessous pour exécuter le hadoop fichier jar à partir de la CLI.
J'ai eu la réponse stackoverflow.com/questions/43017899/...
OriginalL'auteur Kumar Basapuram
J'ai aussi couru dans le même problème et la console ne montrent pas beaucoup d'informations mais juste
RunJar jarfiles [mainClass] args...
Veuillez vérifier le pot pour le paquet de dossiers à l'emplacement, comme une approche simple s'il vous plaît essayer est le paquet commence avec com.société...
La "com" le dossier le dossier de premier niveau, quand le bocal est déballé
OriginalL'auteur Anirudh