ClassNotFoundException при выполнении примера работы Hadoop - PullRequest
2 голосов
/ 13 декабря 2011

Я кое-что начал с hadoop.Он настроен и работает правильно.Прямо сейчас я делаю один узел / отдельный кластер.Я пытаюсь запустить пример задания, как указано на http://hadoop.apache.org/common/docs/r0.18.3/mapred_tutorial.html

. Пока программа правильно скомпилирована, jar создан, манифест успешно добавлен.Но когда я пытаюсь запустить задание, я получаю эту ошибку.

Exception in thread "main" java.lang.ClassNotFoundException: org.myorg.WordCount
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 java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at org.apache.hadoop.util.RunJar.main(RunJar.java:149)

Я скопировал и вставил точно такую ​​же программу, как указано в ссылке.Но это дает эту ошибку.Это командная строка, которую я ударил.

[shantanu@shades1ld1 hadoop]$ bin/hadoop jar /home/shantanu/hadoop/src/examples/wordcount.jar org.myorg.WordCount /tmp/Hadoop_Jobs/ /tmp/Hadoop_Results

Я просмотрел множество статей, но не смог найти объяснения этому, пожалуйста, помогите.

Ответы [ 2 ]

10 голосов
/ 01 марта 2012

Я обнаружил, что мне нужно добавить это в пример приложения, чтобы Hadoop знал, в каком банке находятся мои файлы классов.

diff --git a/src/org/myorg/WordCount.java b/src/org/myorg/WordCount.java
index 912311a..8cc1b93 100644
--- a/src/org/myorg/WordCount.java
+++ b/src/org/myorg/WordCount.java
@@ -43,7 +43,8 @@ public class WordCount {
  public static void main(String[] args) throws Exception {
     Configuration conf = new Configuration();

     Job job = new Job(conf, "wordcount");
+    job.setJarByClass(WordCount.class);

     job.setOutputKeyClass(Text.class);
     job.setOutputValueClass(IntWritable.class);

Я не уверен, является ли это новым для hadoop или нет, но setJarByClass сообщит hadoop использовать весь jar-файл, основанный на одном классе, который содержится в этом jar-файле. Баночка все еще должна быть в вашем классе. Это команда, которую я выполнил:

hadoop jar wordcount.jar org.myorg.WordCount /usr/$USER/wordcount/input /usr/$USER/wordcount/output

И я ранее скопировал файлы примеров в HDFS, используя эту команду:

hadoop dfs -copyFromLocal input/file01 /usr/$USER/wordcount/input/file01 
hadoop dfs -copyFromLocal input/file02 /usr/$USER/wordcount/input/file02 
hadoop dfs -ls /usr/$USER/wordcount/input

где input / file01:

Hello World Bye World

и input / file02:

Hello Hadoop Goodbye Hadoop

Я выставил github repo с инструкциями о том, что мне удалось получить.

6 голосов
/ 13 декабря 2011

Вы уверены, что wordcount.jar содержит класс org.myorg.WordCount?

Разве вы не изменяли имя пакета?

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