0

I am new to Hadoop and trying to run the Map reduce program that is Word Count and i am getting the following error java.lang.RuntimeException: java.lang.ClassNotFoundException: wordcount_classes.WordCount$Map and WordCount.java

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

import org.apache.hadoop.fs.Path;
import org.apache.hadoop.conf.*;
import org.apache.hadoop.io.*;
import org.apache.hadoop.mapreduce.*;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;

public class WordCount {

public static class Map extends 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, Context context) throws IOException, InterruptedException {
       String line = value.toString();
       StringTokenizer tokenizer = new StringTokenizer(line);
       while (tokenizer.hasMoreTokens()) {
           word.set(tokenizer.nextToken());
           context.write(word, one);
       }
   }
} 

public static class Reduce extends Reducer<Text, IntWritable, Text, IntWritable> {

   public void reduce(Text key, Iterable<IntWritable> values, Context context) 
     throws IOException, InterruptedException {
       int sum = 0;
       for (IntWritable val : values) {
           sum += val.get();
       }
       context.write(key, new IntWritable(sum));
   }
}

public static void main(String[] args) throws Exception {
   Configuration conf = new Configuration();

      Job job = new Job(conf, "wordcount");

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

   job.setMapperClass(Map.class);
   job.setReducerClass(Reduce.class);

   job.setInputFormatClass(TextInputFormat.class);
   job.setOutputFormatClass(TextOutputFormat.class);

   FileInputFormat.addInputPath(job, new Path(args[0]));
   FileOutputFormat.setOutputPath(job, new Path(args[1]));
   job.setJarByClass(WordCount.class);    
   job.waitForCompletion(true);
}

wordcount_classes directory contents are

-rw-r--r--   1 sagar supergroup       1855 2014-10-03 13:15 /user/sagar  /wordcount_classes/WordCount$Map.class
-rw-r--r--   1 sagar supergroup       1627 2014-10-03 13:15 /user/sagar/wordcount_classes/WordCount$Reduce.class
-rw-r--r--   1 sagar supergroup       1453 2014-10-03 13:14 /user/sagar/wordcount_classes/WordCount.class
-rw-r--r--   1 sagar supergroup       3109 2014-10-03 13:15 /user/sagar/wordcount_classes/wordcount.jar

}

and i am compiling the program by following command

hadoop jar wordcount_classes/wordcount.jar wordcount_classes/WordCount input r1

1 Answer 1

1

Please check the following :

  1. Did you compile as runnable jar
  2. Did you run from the folder the jar contains or
  3. Run using the following command

     hadoop jar <path_to_jar>/wordcount.jar WordCount <hdfs_path_to_input>/input <hdfpath>/r1
    
Sign up to request clarification or add additional context in comments.

14 Comments

Where are these input and output directory should be that is in hdfs files or elsewhere ?
input should be the input source file located in hdfs and output is a directory in hdfs but it should not be created , output will be created by the program itself. Let me know if your issue is fixed
How do i know file system path of directory created in hdfs ?
where the WordCount .class file should be ? should it be in hdfs file system only ?
neednot be in hdfs, it can be in the local system
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.