Question

I am getting the error in the addInputPath method of my MapReduce Driver. The error is

"The method addInputPath(Job, Path) in the type FileInputFormat is not applicable for the arguments (JobConf, Path)"

Here is my code for the driver:

package org.myorg;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
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.mapred.JobClient;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;

public class WordCount extends Configured implements Tool{
    public int run(String[] args) throws Exception
    {
          //creating a JobConf object and assigning a job name for identification purposes
          JobConf conf = new JobConf(getConf(), org.myorg.WordCount.class);
          conf.setJobName("WordCount");

          //Setting configuration object with the Data Type of output Key and Value
          conf.setOutputKeyClass(Text.class);
          conf.setOutputValueClass(IntWritable.class);

          //Providing the mapper and reducer class names
          conf.setMapperClass(WordCountMapper.class);
          conf.setReducerClass(WordCountReducer.class);

          //the hdfs input and output directory to be fetched from the command line
          **FileInputFormat.addInputPath(conf, new Path(args[0]));**
          FileOutputFormat.setOutputPath(conf, new Path(args[1]));

          JobClient.runJob(conf);
          return 0;
    }

    public static void main(String[] args) throws Exception
    {
          int res = ToolRunner.run(new Configuration(), new WordCount(),args);
          System.exit(res);
    }
}

I import the correct org.apache.hadoop.mapred.FileOutputFormat.

My WordCountMapper correctly implements Mapper.

FileOutputFormat.setOutputPath works correctly.

Why does the addInputhPaths throw an error?

Was it helpful?

Solution

The problem is that you are mixing the old API (.mapred.) and the new API (.mapreduce.). The two APIs are not compatible.

I suggest you use all the objects from the new API and not use anything from the old API. That is, don't use JobConf or JobClient. Use Job and Configuration instead. And be sure you are using Mapper, Reducer, etc. from an import that includes .mapreduce. not .mapred..

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top