2010-09-26 19 views
15

Ustawiłem Hadoop na moim laptopie i uruchomiłem przykładowy program podany w przewodniku instalacji. Ale nie jestem w stanie uruchomić programu.Jak uruchomić program 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. 

Książka powiedział, że powinniśmy ustawić ścieżkę klasy Hadoop pisząc

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

Główna klasa jest zdefiniowana w pliku MaxTemperature.java że jestem wykonującego. Jak ustawić ścieżkę klasy Hadoop? Czy musimy to zrobić dla wszystkich realizacji programu lub tylko raz? Gdzie powinienem umieścić folder wejściowy. Mój kod znajduje się w/home/rohit/hadoop/ch2, a moja instalacja Hadoop jest w/home/hadoop.

Odpowiedz

8

Powinieneś spakować swoją aplikację do pliku JAR, który jest znacznie łatwiejszy i mniej podatny na błędy niż manipulowanie przy użyciu folderów ścieżek klas.

W twoim przypadku musisz również skompilować plik .java. Mówiłeś, że to MaxTemparature.java, ale przed uruchomieniem musi też istnieć klasa MaxTemperature.class.

+0

Książka Mam na myśli nie powiedzieć, że powinniśmy spakować pliki w pliku jar na łatwą dystrybucję ponad grupa. Ale dla uproszczenia używają pojedynczych plików na początku. – rohitmishra

6

oto ansewer w 3 krokach:

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 

(trzeba stworzyć build/classes directory)

Pozdrawiam Walid

+1

+1 instrukcje krok po kroku – Shekhar

1

po dokonaniu klasa pliku JAR:

hadoop jar MaxTemperature.jar MaxTemperature 

basicly:

hadoop jar jarfile main [args] 
6

znalazłem ten problem, a także, gdy dzieje thru Hadoop Księgi (O'Reilly). Naprawiłem to, ustawiając zmienną HADOOP_CLASSPATH w pliku hadoop-env.sh w twoim katalogu konfiguracyjnym.

6
  1. Pierwszy kompilacji plików Java jak powiedział przez Walid:

    javac -classpath path-to-hadoop-0.19.2-core.jar .java-files -d folder-to-contain-classes 
    
  2. Tworzenie pliku jar klas aplikacji:

    jar cf filename.jar *.classes 
    

    w jednym z, czy są eksportowane klasy do pliku jar lub przy użyciu określonego folderu do przechowywania plików klas, powinieneś zdefiniować HADOOP_CLASSPATH wskazując na ten konkretny cla plik ss lub folder zawierający plik klasy. Tak więc w momencie uruchamiania komendy Hadoop powinna wiedzieć, gdzie szukać głównej klasy.

  3. ustawić HADOOP_CLASSPATH

    export HADOOP_CLASSPATH=path-to-filename.jar 
    

    lub

    export HADOOP_CLASSPATH=path-to-folder-containing-classes 
    
  4. Uruchom za pomocą polecenia Hadoop:

    hadoop main-class args 
    
2

Nie koniecznie potrzebny plik jar, ale yo umieścisz MaxTemperature w paczce?

Jeśli tak, to znaczy plik MaxTemperature.class jest w yourdir/bin/yourpackage/, wszystko co musisz zrobić, to:

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

Dziękuję za czystą odpowiedź – Vor

Powiązane problemy