2016-10-29 1 views
1

Ich habe gerade ein einfaches hadoopop-Programm in der IDE ausgeführt. aber es ist ein Fehler, erwähnt, wenn ich versucheFehler: (63, 40) Java: Inkompatible Typen: org.apache.hadoop.mapreduce.Job kann nicht in org.apache.hadoop.mapred.JobConf konvertiert werden

$Error:(63, 40) java: incompatible types: org.apache.hadoop.mapreduce.Job cannot be converted to org.apache.hadoop.mapred.JobConf

Hier mein Code zu kompilieren für dieses kleine Programm ist:

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.mapred.FileOutputFormat; 
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 java.io.IOException; 
import java.util.StringTokenizer; 

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()); 
     while (itr.hasMoreTokens()) { 
      word.set(itr.nextToken()); 
      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(); 
    Job job = Job.getInstance(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); 
    FileInputFormat.addInputPath(job, new Path(args[0])); 
    FileOutputFormat.setOutputPath(job, new Path(args[1])); 
    System.exit(job.waitForCompletion(true) ? 0 : 1); 
} 
} 

Antwort

3

Ursachen:

Sie old API' FileOutputFormat(mapred) in Ihrer Arbeit verwendet haben Das nimmt JobConf Objekt als ersten Parameter nicht Job, aber FileInputFormat Methode, die Sie von new API(maprecude) verwenden, die Job Objekt als erste nimmt Parameter. (Job ist auch von neuen API, ist JobConf aus alten API)


Lösung:

Ändern Sie diese Zeile im Code:

import org.apache.hadoop.mapred.FileOutputFormat; 

zu

import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; 
+0

Danke. Es funktioniert auf Ihre Weise – Michael

+0

groß - bitte akzeptieren Sie dies als Antwort (klicken Sie auf das richtige Zeichen auf der linken Seite der Pfeile nach oben/unten) –

Verwandte Themen