Как запустить программу 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.

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

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

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

Ответы

Ответ 1

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

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

Ответ 2

вот ансамбль в 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

(вам нужно создать каталог build/classes)

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

Ответ 3

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

Ответ 4

  • Сначала скомпилируйте файлы Java, как указано walid:

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

    jar cf filename.jar *.classes
    

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

  • set HADOOP_CLASSPATH

    export HADOOP_CLASSPATH=path-to-filename.jar
    

    или

    export HADOOP_CLASSPATH=path-to-folder-containing-classes
    
  • Запуск с использованием команды Hadoop:

    hadoop main-class args
    

Ответ 5

Вам не обязательно нужен файл jar, но вы помещали MaxTemperature в пакет?

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

export HADOOP_CLASSPATH=yourdir/bin
hadoop yourpackage.MaxTemperature

Ответ 6

после того, как вы сделаете свой класс файлом jar:

hadoop jar MaxTemperature.jar MaxTemperature

в основном:

hadoop jar jarfile main [args]