Map类及Reduce类的调用

在Map和Reduce类中,我们完成了代码实现过程
如果要调用MR程序,我们需要写一个main函数
public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
    Configuration conf = new Configuration();
    conf.addResource("core-site.xml");
    conf.addResource("hdfs-site.xml");
    conf.set("fs.defaultFS", "hdfs://allin:9000");

    String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
    if (otherArgs.length != 2) {
        System.out.println("Usage: hadoop jar xxxx <in> <out>");
    }
    Job job = Job.getInstance(conf);
    job.setJobName("LineCount");
    job.setJarByClass(WordCount.class);

    //初始化map
    job.setMapperClass(MyFirstMapper.class);
    job.setMapOutputKeyClass(Text.class);
    job.setMapOutputValueClass(IntWritable.class);

    //shuffle
    job.setCombinerClass(MyFirstReducer.class);

    //初始化reducer
    job.setReducerClass(MyFirstReducer.class);
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);

    //输入及输出路径
    Path in  = new Path(otherArgs[0]);
    Path out = new Path(otherArgs[1]);
    FileInputFormat.addInputPath(job, in);
    FileOutputFormat.setOutputPath(job, out);

    System.exit(job.waitForCompletion( true) ? 0 : 1);
}

除了这种方式调用Map和Reduce程序外,还有一种方式。

项目结构如图。
我们可以定义一个类RunMR,来调用DoMapper和DoReducer。在RunMR中,就是我们的main。来看下具体的代码
在这里RunMR,实现了hadoop中org.apache.hadoop.util包下的Tool接口。并且重写了里面的三个方法。

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注