2015-06-11 2 views
0

Привет, У меня возникли проблемы, и я еще не смог получить помощь из похожих потоков. Я делаю пример задания hadoop, и я просто пытаюсь запустить его из IDE прямо сейчас. Вот мой исходный кодHadoop Класс работы не найден

package org.myorg; 

import java.io.IOException; 
import java.util.*; 

import org.apache.hadoop.io.*; 
import org.apache.hadoop.conf.*; 
import org.apache.hadoop.fs.Path; 
import org.apache.hadoop.mapred.*; 

import org.apache.hadoop.util.*; 


public class WordCount 
{ 

public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> { 
    private final static IntWritable one = new IntWritable(1); 
    private Text word = new Text(); 

    public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException 
    { 
     String line = value.toString().toLowerCase().replaceAll("\\p{Punct}|\\d",""); 
     StringTokenizer tokenizer = new StringTokenizer(line); 
     while (tokenizer.hasMoreTokens()) 
     { 

      word.set(tokenizer.nextToken()); 
      output.collect(word, one); 

     }// end while 

    }// end public void map 

}// end public static class Map 


public static class Reduce extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable> 
{ 
    public void reduce(Text key, Iterator<IntWritable> values, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException 
    { 
     int sum = 0; 
     while (values.hasNext()) 
     { 
      sum+= values.next().get(); 
     }// end while 

     output.collect(key, new IntWritable(sum)); 

    }// end public void reduce 

}// end public static class Reduce 

public static void main(String[] args) throws Exception 
{ 
    JobConf conf = new JobConf(org.myorg.WordCount.class); 
    conf.setJobName("wordcount"); 

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

    conf.setMapperClass(Map.class); 
    conf.setCombinerClass(Reduce.class); 
    conf.setReducerClass(Reduce.class); 

    conf.setInputFormat(TextInputFormat.class); 
    conf.setOutputFormat(TextOutputFormat.class); 

    FileInputFormat.setInputPaths(conf, new Path(args[0])); 
    FileOutputFormat.setOutputPath(conf, new Path(args[1])); 

    JobClient.runJob(conf); 

    }// end main 

}//end public class WordCount 

Вот исключение, которое я получаю. У кого-нибудь есть идеи?

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Level 
    at org.apache.hadoop.mapred.JobConf.<clinit>(JobConf.java:362) 
    at org.myorg.WordCount.main(WordCount.java:56) 
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Level 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
+1

Этот класс «Уровень» относится к log4j - http://javasearch.buggybread.com/home.php?keyword=org.apache.log4j.Level, который, кажется, отсутствует. –

ответ

1

Очевидно, что он не содержит файлов журнала log4j. вы должны добавить банку в свой путь к классам.

+0

О, я попробую это завтра. Интересно, как он знает, что я потерял log4j jar, если он не распознает класс? Разве это не должно быть причиной ошибки компиляции? Надеюсь, это не абсурдный вопрос. –

+0

Вот и сэр! У меня есть еще одно исключение. Но спасибо за эту помощь. –

+0

Поскольку при компиляции исходного кода среда IDE будет импортировать ссылку на log4j автоматически или вручную. Но когда вы запускаете программу, среда IDE будет использовать собственный путь к классам, и если log4j не находится в пути к классам, будет выбрано исключение «NoClassDefFoundErro». – gwgyk

Смежные вопросы