2010-09-26 5 views
15

J'ai installé Hadoop sur mon ordinateur portable et exécuté avec succès le programme d'exemple donné dans le guide d'installation. Mais, je ne suis pas capable de lancer un programme.Comment lancer un programme Hadoop?

[email protected]:~/hadoop/ch2$ hadoop MaxTemperature input/ncdc/sample.txt output 
Exception in thread "main" java.lang.NoClassDefFoundError: MaxTemperature 
Caused by: java.lang.ClassNotFoundException: MaxTemperature 
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:307) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
Could not find the main class: MaxTemperature. Program will exit. 

Le livre dit que nous devrions établir un Classpath Hadoop en écrivant

[email protected]:~/hadoop/ch2$ export HADOOP_CLASSPATH=build/classes 

La classe principale est définie dans le fichier MaxTemperature.java que j'exécute. Comment définit-on Hadoop Classpath? Devons-nous le faire pour toute l'exécution du programme ou seulement une fois? Où dois-je mettre le dossier d'entrée. Mon code est/home/rohit/hadoop/ch2 et mon installation Hadoop est/home/hadoop.

Répondre

8

Vous devriez empaqueter votre application dans un fichier JAR, c'est beaucoup plus facile et moins sujette aux erreurs que de jouer avec les dossiers de classpath.

Dans votre cas, vous devez également compiler le fichier .java. Vous avez dit que MaxTemparature.java, mais il doit aussi y avoir une MaxTemperature.class avant de pouvoir l'exécuter.

+0

Le livre que je fais référence a dit que nous devrions regrouper les fichiers dans un fichier jar pour une distribution facile sur une grappe. Mais, pour plus de simplicité, ils utilisent des fichiers individuels au début. – rohitmishra

6

est ici le ansewer en 3 étapes:

1:

javac -verbose -classpath C:\\hadoop\\hadoop-0.19.2-core.jar MaxTemperature*.java -d build/classes 

2:

put *.class in build/classes 

3:

export HADOOP_CLASSPATH=${HADOOP_HOME}/path/to/build/classes 

(vous devez créer la construction/classes annuaire)

Cordialement walid

+1

+1 pour les instructions étape par étape – Shekhar

1

après avoir fait votre classe un fichier jar:

hadoop jar MaxTemperature.jar MaxTemperature 

basiquement:

hadoop jar jarfile main [args] 
6

J'ai trouvé ce problème aussi bien lors du passage à travers le Hadoop livre (O'Reilly). Je l'ai corrigé en définissant la variable HADOOP_CLASSPATH dans le fichier hadoop-env.sh dans votre répertoire de configuration.

6
  1. d'abord compiler les fichiers Java comme dit par walid:

    javac -classpath path-to-hadoop-0.19.2-core.jar .java-files -d folder-to-contain-classes 
    
  2. Créer un fichier jar de classes d'application:

    jar cf filename.jar *.classes 
    

    Dans l'une des, si vous exportez les classes en fichier jar ou en utilisant un dossier spécifique pour stocker les fichiers de classe, vous devez définir HADOOP_CLASSPATH pointant vers ce cla particulier ss fichier ou dossier contenant le fichier de classe. Ainsi, lors de l'exécution de la commande Hadoop, il devrait savoir où chercher pour la classe principale.

  3. mis HADOOP_CLASSPATH

    export HADOOP_CLASSPATH=path-to-filename.jar 
    

    ou

    export HADOOP_CLASSPATH=path-to-folder-containing-classes 
    
  4. Exécuter en utilisant la commande Hadoop:

    hadoop main-class args 
    
2

Vous ne devez pas nécessairement un fichier jar, mais a yo Vous mettez MaxTemperature dans un paquet?

Si oui, que votre fichier MaxTemperature.class est yourdir/bin/yourpackage/, tout ce que vous devez faire est:

export HADOOP_CLASSPATH=yourdir/bin 
hadoop yourpackage.MaxTemperature 
+0

Merci pour votre réponse – Vor

Questions connexes