2014-07-09 1 views
1

J'ai écrit mapper et réducteur en python pour le programme de comptage de mots qui fonctionne bien. Voici un exemple:impossible d'exécuter la carte réduire en utilisant python dans Hadoop?

echo "hello hello world here hello here world here hello" | wordmapper.py | sort -k1,1 | wordreducer.py 
hello 4 
here 3 
world 2 

Maintenant, lorsque je tente de présenter un travail de Hadoop pour un gros fichier, je reçois des erreurs

hadoop jar share/hadoop/tools/sources/hadoop-*streaming*.jar -file wordmapper.py -mapper wordmapper.py -file wordreducer.py -reducer wordreducer.py -input /data/1jrl.pdb -output /output/py_jrl 
Exception in thread "main" java.lang.ClassNotFoundException: share.hadoop.tools.sources.hadoop-streaming-2.2.0-test-sources.jar 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:249) 
    at org.apache.hadoop.util.RunJar.main(RunJar.java:205) 

j'ai enlevé changé la ligne de commande pour les éléments suivants (retiré wild card de au dessus);

hadoop jar share/hadoop/tools/sources/hadoop-streaming-2.2.0-sources.jar -file wordmapper.py -mapper wordmapper.py -file wordreducer.py -reducer wordreducer.py -input /data/1jrl.pdb -output /output/py_jrl 
Exception in thread "main" java.lang.ClassNotFoundException: -file 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:249) 
    at org.apache.hadoop.util.RunJar.main(RunJar.java:205) 

pourquoi je reçois ces erreurs et comment résoudre ce problème? J'utilise hadoop2. Merci!

Répondre

3

Eh bien au moins un de vos problèmes est que vous utilisez le -sources.jar qui est juste .java et ne peut pas être exécuté.

Essayez d'utiliser cette place ...

share/hadoop/tools/lib/hadoop-streaming-2.2.0.jar 

Et si cela n'existe pas, cherchez un hadoop-streaming*.jar qui n'a pas -sources dans le nom du fichier.

+0

Cela a fonctionné très bien. Savez-vous où je peux chercher des fichiers java (code source) pour les classes en partage/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar – eagertoLearn

+0

Allez à la [page de téléchargement de Hadoop 2.2 Apache] (https://archive.apache.org/dist/hadoop/core/hadoop-2.2.0/) et téléchargez 'hadoop-2.2.0-src.tar.gz' – climbage

+0

désolé cela pourrait être une question stupide. devrais-je télécharger l'ensemble de hadoop-src tar pour obtenir le code source des exemples? – eagertoLearn

Questions connexes