Map/Reduce 通过理解org.apache.hadoop.mapreduce.Job类来学

在我的上篇文章“Hadoop - Map/Reduce 通过WordCount例子的变化来了解新版hadoop接口的变化”中(见),已经跟大家提到,在Hadoop新的版本中,使用org.apache.hadoop.mapreduce.Job类替代了JobClient类。现在,我想通过对于了解Job来学习hadoop的调用逻辑。

首先,我们来回顾一下,在wordcount例子中,main函数通过创建Job类,并给Job实例设置相应的值,最终调用waitForCompletion函数来执行Job。

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);
    FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
    FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
    System.exit(job.waitForCompletion(true) ? 0 : 1);

Job类本身是继承自JobContextImpl,并实现了JobContext接口。JobContextImpl是JobContext接口的一个简单实现,给Job类中的相关方法提供了一系列的默认实现。
 
Job类本身提供的构造函数如下:

Job()
Job(Configuration)
Job(Configuration, String)
Job(Cluster)
Job(Cluster, Configuration)
Job(Cluster, JobStatus, Configuration)

在前3个构造函数的实现中,最终会由configuration生成新的cluster类,从而调用第5个构造函数,而第4和第6个构造函数也会调用第5个构造函数,因此,第5个构造函数是实际上Job类构造的实现。Cluster类提供了访问map/reduce cluster的一系列方法。而Configuration类提供了对于配置信息的访问方法。

除了上面列出的构造函数,Job类还提供了一系列对应的工厂方法:

getInstance()
getInstance(Configuration)
getInstance(Configuration, String)
getInstance(Cluster)
getInstance(Cluster, Configuration)
getInstance(Cluster, JobStatus, Configuration)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/305a51b8567cf6da46afac48e758c116.html