2010-09-26 4 views
15

Я создал Hadoop на своем ноутбуке и успешно выполнил пример программы, приведенной в руководстве по установке. Но я не могу запустить программу.Как запустить программу 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. 

Книга говорит, что мы должны установить Classpath Hadoop написав

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

Основной класс определен в MaxTemperature.java файле, который я исполняющим. Как установить путь класса Hadoop? Нужно ли это делать для всего выполнения программы или только один раз? Где я должен помещать папку ввода. Мой код находится в/home/rohit/hadoop/ch2, и моя установка Hadoop находится в/home/hadoop.

ответ

8

Вы должны упаковать приложение в JAR-файл, это намного проще и менее подвержено ошибкам, чем возиться с папками классов.

В вашем случае вы также должны скомпилировать файл .java. Вы сказали, что это MaxTemparature.java, но также должен быть класс MaxTemperature.class, прежде чем вы сможете его запустить.

+0

Книга, которую я имею в виду, так сказать, что мы должны упаковать файлы в файл фляги для легкого распространения по кластер. Но для простоты они используют отдельные файлы в начале. – rohitmishra

6

вот ansewer в 3 этапа:

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 

(вы должны создать сборку/classes)

С наилучшими пожеланиями Валид

+1

+1 для пошаговых инструкций – Shekhar

1

после того, как вы сделаете свой класс баночку файл:

hadoop jar MaxTemperature.jar MaxTemperature 

поясню:

hadoop jar jarfile main [args] 
6

Я нашел эту проблему, а при переходе через в Hadoop книгу (O'Reilly). Я исправил его, установив переменную HADOOP_CLASSPATH в файле hadoop-env.sh в вашем каталоге конфигурации.

6
  1. Сначала компилировать файлы Java, рассказанной Валид:

    javac -classpath path-to-hadoop-0.19.2-core.jar .java-files -d folder-to-contain-classes 
    
  2. Создать баночку файл классов приложения:

    jar cf filename.jar *.classes 
    

    В любом из, будь вы экспортируете классы в файл jar или использование определенной папки для хранения файлов классов, вы должны определить HADOOP_CLASSPATH, указывая на эту конкретную группу ss файл или папку, содержащую файл класса. Так что во время запуска команды Hadoop он должен знать, где искать указанную для основного класса.

  3. набор HADOOP_CLASSPATH

    export HADOOP_CLASSPATH=path-to-filename.jar 
    

    или

    export HADOOP_CLASSPATH=path-to-folder-containing-classes 
    
  4. Выполнить с помощью команды Hadoop:

    hadoop main-class args 
    
2

Вам не обязательно нужен файл банку, но сделал лет u положил MaxTemperature в пакет?

Если это так, что ваш файл MaxTemperature.class в yourdir/bin/yourpackage/, все, что вам нужно сделать, это:

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

Спасибо за чистый ответ – Vor