Как запустить Hadoop с классом Java? - PullRequest
4 голосов
/ 31 августа 2010

Я слежу за книгой Hadoop: полное руководство .

Я запутался в примере 3-1.

Существует исходный файл Java, URLCat.Джава.Я использую javac, чтобы скомпилировать его в URLCat.class, затем использую jar, чтобы обернуть его в банку.

В книге сказано, что для его запуска используется

% hadoop URLCat hdfs://localhost/user/tom/quangle.txt

.Я пробовал много разных способов, таких как

% hadoop jar URLCat.jar .......

, но не работал.Я получил такие ошибки:

Исключение в потоке "main" java.lang.ClassNotFoundException: hdfs: // localhost / user / username / quangle / txt

Чтопричина для этого, и как я могу сделать это правильно?

Ответы [ 9 ]

4 голосов
/ 10 сентября 2010

Все довольно просто:

[me@myhost ~]$ hadoop jar
RunJar jarFile [mainClass] args...

Итак, вы хотите hadoop jar yourJar.jar your.class.with.Main [any args]

3 голосов
/ 18 февраля 2012

Конечно, вы могли бы использовать cat, но это не главное (т.е. вы учитесь, а не просто пытаетесь заставить его работать).

Согласно книге, вам необходимо установить переменную окружения HADOOP_CLASSPATH. В моем случае, используя пример сборки из книги, все мои классы находятся по адресу: / media / data / hadefguide / book / build / classes

Вот пример:

hduser@MuleBox ~ $ export HADOOP_CLASSPATH=
hduser@MuleBox ~ $ hadoop URLCat hdfs://localhost/user/hduser/quangle.txt
Exception in thread "main" java.lang.NoClassDefFoundError: URLCat
Caused by: java.lang.ClassNotFoundException: URLCat
    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:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: URLCat.  Program will exit.
hduser@MuleBox ~ $ export HADOOP_CLASSPATH=/media/data/hadefguide/book/build/classes
hduser@MuleBox ~ $ hadoop URLCat hdfs://localhost/user/hduser/quangle.txt
On the top of the Crumpetty Tree
The Quangle Wangle sat,
But his face you could not see,
On account of his Beaver Hat.
0 голосов
/ 19 января 2016

Перейдите в каталог, где находятся ваши скомпилированные .class файлы.

Использовать полное имя класса, включая имя пакета (см. Получение «неправильного имени» NoClassDefFoundError при выполнении программы на Java из командной строки для полного имени класса или каталога, в котором выполняется задание) при запуске hadoop URLCat hdfs://localhost/user/tom/quangle.txt.

В моем случае URLCat.java было в com.tom.app, поэтому команда hadoop была hadoop com.tom.app.URLCat hdfs://localhost/user/tom/quangle.txt.

0 голосов
/ 12 января 2016

шаг 1. Компиляция Java-программы:

javac URLCat.java -classpath $ HADOOP_HOME / share / hadoop / common / hadoop-common-2.7.0.jar

шаг 2: создание файла jar:

jar cvf URLCat.jar URLCat.class

Шаг 3: Выполнение программы: (укажите местоположение файла hdfs)

hadoop jar URLCat.jar URLCat hdfs: // localhost: 9000 / pcode / wcinput.txt

0 голосов
/ 01 декабря 2014

Не уверен, насколько полезен сейчас ответ.Сегодня я столкнулся с той же проблемой, работая над примером из той же книги (полное руководство по Hadoop). Мне удалось выполнить пример программы следующим образом:

  • Напишите свой код Java и сохранитеэто как .java файл

  • Скомпилируйте вашу Java-программу, используя:

    javac -classpath <path to hadoop core and commons-cli jar file> <path to your java program file>
    
  • Создайте JAR-файл, содержащий ваш файл класса:

    jar cvf <jar file> <class files to add separated by space>
    
  • Выполнить файл JAR с помощью hadoop командной строки:

    hadoop jar <jar file name> <class name containing your main method> <argument to the main method>
    

    например,

    hadoop jar FileSystemCat.jar FileSystemCat hdfs://localhost/user/root/MyFiles/meet_a_seer.txt
    

Надеюсь, это поможет

0 голосов
/ 12 января 2012

Мы можем получить доступ к HDFS через API hdfs.Насколько я понимаю, вы можете использовать API hdfs для связи с кластером hadoop, на котором выполняются dfs, и извлекать из него данные.

Почему нам нужно вызывать команду как hadoop jar URLCat.jar

почему бы не просто Java URLCat

Почему клиенту обязательно нужно установить hadoop и затем связаться с кластером hadoop?

0 голосов
/ 02 октября 2011

Я сделал это на основе справки, найденной на этом сайте, и учебника по hadoop.

mkdir urlcat_classes<br>
javac -classpath /usr/lib/hadoop/hadoop-0.20.2-cdh3u1-core.jar -d     urlcat_classes URLCat.java<br>
jar -cvf urlcat.jar -C urlcat_classes .<br>
hadoop jar urlcat.jar no.gnome.URLCat       
hdfs://localhost/user/claus/sample.txt<br>
<br>
no.gnome is from 'package no.gnome;' in URLCat.java.<br><br>

привет
Клаус

0 голосов
/ 03 сентября 2010

Чтобы команда hadoop URLCat работала, вам нужно, чтобы jar (URLCat.jar) находился в вашем пути к классам. Для этого вы можете поместить его в lib / dir hadoop.

Для запуска Jadoop jar URLCat.jar необходимо создать jar, в котором будет определен класс Main, иначе он считает, что следующим аргументом в командной строке является имя класса. То, что вы можете попробовать, это hadoop jar URLCat.jar URLCat hdfs: // ...

0 голосов
/ 31 августа 2010

Синтаксис команды немного отличается:

hadoop fs -cat hdfs:///user/tom/quangle.txt

У вас есть hasoop home на вашем пути?Вы можете вызвать hadoop без параметров?

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