2016-04-01 6 views
2

Ich habe zwei Mapper-Klassen. So verwendet ChainMapper.addMapper Methode, um Mapper und ChainReducer.setReducer Methode Reducer zu setzen. ChainMapper.addMapper Methode ist OK aber Chain.setReducer Methode throw SyntaxfehlerChainReducer.setReducer Methode wirft Fehler "ChainReducer ist nicht anwendbar für die Argumente"

The method setReducer(Job, Class<? extends Reducer>, Class<?>, Class<?>, Class<?>, Class<?>, Configuration) in the type ChainReducer is not applicable for the arguments (JobConf, Class<FileComparisionReduce>, Class<LongWritable>, Class<Text>, Class<LongWritable>, Class<Text>, boolean, JobConf) 

Hier ist meine Treiberklasse:

package fileComparision; 

import org.apache.hadoop.conf.Configured; 
import org.apache.hadoop.fs.Path; 
import org.apache.hadoop.io.LongWritable; 
import org.apache.hadoop.io.Text; 
import org.apache.hadoop.mapred.JobClient; 
import org.apache.hadoop.mapred.JobConf; 
import org.apache.hadoop.mapred.FileInputFormat; 
import org.apache.hadoop.mapred.FileOutputFormat; 
import org.apache.hadoop.mapred.MapReduceBase; 
import org.apache.hadoop.mapred.Mapper; 
import org.apache.hadoop.mapred.lib.ChainMapper; 
import org.apache.hadoop.mapreduce.lib.chain.ChainReducer; 
import org.apache.hadoop.util.Tool; 
import org.apache.hadoop.util.ToolRunner; 

public class DriverComparision extends Configured implements Tool{ 


    @Override 
    public int run(String[] arg0) throws Exception { 
     JobConf conf = new JobConf(true); 
     conf.setJobName("Comaprision of 2 file "); 
     JobConf Mapper1 = new JobConf(false); 


     ChainMapper.addMapper(conf, FileComparisionMapper1.class, LongWritable.class, Text.class, LongWritable.class, Text.class, true, Mapper1); 

     JobConf Mapper2 = new JobConf(false); 
     ChainMapper.addMapper(conf, FileComparisionMapper2.class, LongWritable.class, Text.class, LongWritable.class, Text.class, true, Mapper2); 


    JobConf Reduc = new JobConf(false); 
     ChainReducer.setReducer(conf, FileComparisionReduce.class, LongWritable.class, Text.class, LongWritable.class, Text.class, true , Reduc); 


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

     conf.setMapOutputKeyClass(LongWritable.class); 
     conf.setMapOutputValueClass(Text.class); 
     conf.setOutputKeyClass(LongWritable.class); 
     conf.setOutputValueClass(Text.class); 


     JobClient.runJob(conf); 

     return 0; 
    } 

auch versucht, durch Boolesche Argument zu entfernen "true"

JobConf Reduc = new JobConf(false); 
     ChainReducer.setReducer(conf, FileComparisionReduce.class, LongWritable.class, Text.class, LongWritable.class, Text.class, true , Reduc); 

Antwort

1

schließlich bekam ich eine Lösung. Importiertes falsches Paket ie. import org.apache.hadoop.mapreduce.lib.chain.ChainReducer; anstelle von import org.apache.hadoop.mapred.lib.ChainReducer;

Verwandte Themen