Как запустить программу Hadoop? - PullRequest
15 голосов
/ 27 сентября 2010

Я установил Hadoop на своем ноутбуке и успешно запустил программу, приведенную в руководстве по установке.Но я не могу запустить программу.

rohit@renaissance1:~/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, написав

rohit@renaissance1:~/hadoop/ch2$ export HADOOP_CLASSPATH=build/classes

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

Ответы [ 6 ]

8 голосов
/ 27 сентября 2010

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

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

6 голосов
/ 16 сентября 2012
  1. Сначала скомпилируйте файлы Java, как сказано walid :

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

    jar cf filename.jar *.class
    

    В любом случае, экспортируете ли вы классы в файл jar или используете конкретную папку для хранения файлов классов, вы должны определить HADOOP_CLASSPATH, указывающую на этот конкретный файл класса или папку, содержащую файл класса. Так что во время выполнения команды 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
    
6 голосов
/ 31 августа 2011

Я также обнаружил эту проблему при просмотре Книги Hadoop (О'Рейли). Я исправил это, установив переменную HADOOP_CLASSPATH в файле hadoop-env.sh в вашем каталоге конфигурации.

6 голосов
/ 12 марта 2011

здесь ответ в 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)

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

2 голосов
/ 25 февраля 2013

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

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

export HADOOP_CLASSPATH=yourdir/bin
hadoop yourpackage.MaxTemperature
1 голос
/ 12 марта 2011

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

hadoop jar MaxTemperature.jar MaxTemperature

в основном:

hadoop jar jarfile main [args]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...