2010-09-26 19 views
15

He configurado Hadoop en mi computadora portátil y ejecuté con éxito el programa de ejemplo que figura en la guía de instalación. Pero, no puedo ejecutar un programa.¿Cómo ejecutar un programa de 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. 

El libro dice que debemos establecer una ruta de clases Hadoop escribiendo

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

La clase principal se define en el archivo MaxTemperature.java que yo estoy ejecutando. ¿Cómo establecemos Hadoop Classpath? ¿Tenemos que hacerlo para la ejecución de todos los programas o solo una vez? ¿Dónde debería poner la carpeta de entrada? Mi código está en/home/rohit/hadoop/ch2 y mi instalación de Hadoop está en/home/hadoop.

Respuesta

8

Debe empaquetar la aplicación en un archivo JAR, eso es mucho más fácil y menos propenso a errores que manipular las carpetas classpath.

En su caso, también debe compilar el archivo .java. Dijiste que es MaxTemparature.java, pero también debe haber una clase de MaxTemperature antes de poder ejecutarla.

+0

El libro me refiero he dicho que deberíamos empaquetar los archivos en un archivo JAR para facilitar su distribución a través de una racimo. Pero, para simplificar, están usando archivos individuales al comienzo. – rohitmishra

6

aquí es el ansewer en 3 pasos:

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 

(usted tiene que crear la acumulación/directorio de clases)

Saludos Walid

+1

+1 para instrucciones paso a paso – Shekhar

1

después de hacer su clase de un archivo jar:

hadoop jar MaxTemperature.jar MaxTemperature 

básicamente:

hadoop jar jarfile main [args] 
6

me encontré con este problema también cuando se va a través del libro de Hadoop (O'Reilly). Lo arreglé estableciendo la variable HADOOP_CLASSPATH en el archivo hadoop-env.sh en su directorio de configuración.

6
  1. Primera compilar los archivos de Java según lo dicho por Walid:

    javac -classpath path-to-hadoop-0.19.2-core.jar .java-files -d folder-to-contain-classes 
    
  2. Crear archivo jar de clases de la aplicación:

    jar cf filename.jar *.classes 
    

    En cualquiera de los, si va a exportar las clases en un archivo jar o usando una carpeta específica para almacenar archivos de clase, debe definir HADOOP_CLASSPATH apuntando a esa cla particular ss archivo o carpeta que contiene el archivo de clase. De modo que en el momento de ejecutar el comando Hadoop, debe saber dónde buscar especificado para la clase principal.

  3. conjunto HADOOP_CLASSPATH

    export HADOOP_CLASSPATH=path-to-filename.jar 
    

    o

    export HADOOP_CLASSPATH=path-to-folder-containing-classes 
    
  4. de ejecución con el comando Hadoop:

    hadoop main-class args 
    
2

Usted no necesariamente necesita un archivo jar, pero no yo ¿Has puesto MaxTemperature en un paquete?

Si es así, dicen que su archivo MaxTemperature.class está en yourdir/bin/yourpackage/, todo lo que tiene que hacer es:

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

Gracias por la respuesta limpia – Vor

Cuestiones relacionadas