2015-01-26 4 views
1

Я получаю сообщение об ошибке при запуске модифицированной версии программы Wordcount (добавлена ​​логика отображения, чтобы выделить символы из слов).Нужна помощь при запуске программы Modified Wordcount на песочнице Horton.

Ошибка: java.lang.RuntimeException: java.lang.ClassNotFoundException: Класс wcount.WordCount $ TokenizerMapper

OS: Hortonworks Песочница хостинг 2,6 Hadoop версии Вот что я сделал -

  1. Модифицированный Wordcount.java ввести сопоставителя логику
  2. составившего Wordcount.java используя команду javac -classpath /home/test_user/jars/commons-cli-1.2.jar:/home/test_user/jars/hadoop-common-2.6.0.2.2.0.0-2041.jar:/home/test_user/jars/hadoop-mapreduce-client-core-2.6.0.2.2.0.0-2041.jar -d /home/test_user/hadoopjar/wordcountclass -Xlint:deprecation WordCount.java
  3. Создано вр dCount.jar с использованием jar cvf wordcount.jar wcount (где wcount - это папка со всеми 3 классами (wordcount, токенизатор и intsumreducer). вот что файл баночка выглядит wcount wcount/WordCount.class wcount/WordCount$TokenizerMapper.class wcount/WordCount$intsumreducer.class

  4. Побежал его с помощью команды - hadoop jar wordcount.jar WordCount /home/user/test_user/wordcount/wordcount.txt /home/user/test_user/wordcount/out8

Это ошибок после попытки запустить Map работы Error: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class wcount.WordCount$TokenizerMapper

Код

package wcount; 

import java.io.IOException; 
import java.util.StringTokenizer; 

import org.apache.hadoop.conf.Configuration; 
import org.apache.hadoop.fs.Path; 
import org.apache.hadoop.io.IntWritable; 
import org.apache.hadoop.io.Text; 
import org.apache.hadoop.mapreduce.Job; 
import org.apache.hadoop.mapreduce.Mapper; 
import org.apache.hadoop.mapreduce.Reducer; 
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; 
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; 
import org.apache.hadoop.util.GenericOptionsParser; 

public class WordCount { 

    public static class TokenizerMapper 
     extends Mapper<Object, Text, Text, IntWritable>{ 

    private final static IntWritable one = new IntWritable(1); 
    private Text word = new Text(); 

    public void map(Object key, Text value, Context context 
        ) throws IOException, InterruptedException { 
     StringTokenizer itr = new StringTokenizer(value.toString()); 
     char[] chararray = {'(' , ')' , ';' , ':' , '.' , '/' , '{' , '}' , ']' , ']'}; 
     String temp; 
     while (itr.hasMoreTokens()) 
     { 
      temp = itr.nextToken(); 
      for (short i = 0; i < chararray.length; i++) 
      { 
       if (temp.charAt(0) == chararray[i]) 
       { 
        temp = temp.substring(1); 
       } 
      if (temp.charAt(temp.length() - 1) == chararray[i]) 
       { 
        temp = temp.substring(0, temp.length() - 1); 
       } 
      } 
     word.set(temp); 
     context.write(word, one); 
     } 
    } 
    } 

    public static class IntSumReducer 
     extends Reducer<Text,IntWritable,Text,IntWritable> { 
    private IntWritable result = new IntWritable(); 

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

    public static void main(String[] args) throws Exception { 
    Configuration conf = new Configuration(); 
    String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs(); 
    if (otherArgs.length < 2) { 
     System.err.println("Usage: wordcount <in> [<in>...] <out>"); 
     System.exit(2); 
    } 
    Job job = new Job(conf, "word count"); 
    job.setJarByClass(WordCount.class); 
    job.setMapperClass(TokenizerMapper.class); 
    job.setCombinerClass(IntSumReducer.class); 
    job.setReducerClass(IntSumReducer.class); 
    job.setOutputKeyClass(Text.class); 
    job.setOutputValueClass(IntWritable.class); 
    for (int i = 0; i < otherArgs.length - 1; ++i) { 
     FileInputFormat.addInputPath(job, new Path(otherArgs[i])); 
    } 
    FileOutputFormat.setOutputPath(job, 
     new Path(otherArgs[otherArgs.length - 1])); 
    System.exit(job.waitForCompletion(true) ? 0 : 1); 
    } 
} 

ответ

0

Вы не устанавливаете параметр InputFormatter в своей задаче d поэтому по умолчанию ваш формат ввода - это TextInputFormatter. Таким образом, это может означать, что работа ожидает LongWritable, а не просто Object. Не могли бы вы попытаться изменить extends Mapper<Object на extends Mapper<LongWritable, а также map(Object key на map(LongWritable key?

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

  • Нет связанных вопросов^_^