Map Reduce 简明教程
MapReduce - API
在本课程中,我们将仔细研究涉及 MapReduce 编程操作的类及其方法。我们将主要关注以下内容:
-
JobContext Interface
-
Job Class
-
Mapper Class
-
Reducer Class
JobContext Interface
JobContext 接口是所有类的超级接口,定义 MapReduce 中的不同作业。它为您提供了在任务运行时提供给任务的作业的可读视图。
以下是 JobContext 接口的子接口。
S.No. |
Subinterface Description |
1. |
MapContext<KEYIN, VALUEIN, KEYOUT, VALUEOUT> 定义给定给映射器的上下文。 |
2. |
ReduceContext<KEYIN, VALUEIN, KEYOUT, VALUEOUT>定义传递给 Reducer 的上下文。 |
Job 类是实现 JobContext 接口的主类。
Job Class
Job 类是 MapReduce API 中最重要类。它允许用户配置、提交和控制作业执行,以及查询状态。set 方法只在作业提交前有效,随后它们会抛出 IllegalStateException。
通常,用户会创建应用程序,描述作业的各个方面,然后提交作业并监控其进度。
以下是提交作业的示例:
// Create a new Job
Job job = new Job(new Configuration());
job.setJarByClass(MyJob.class);
// Specify various job-specific parameters
job.setJobName("myjob");
job.setInputPath(new Path("in"));
job.setOutputPath(new Path("out"));
job.setMapperClass(MyJob.MyMapper.class);
job.setReducerClass(MyJob.MyReducer.class);
// Submit the job, then poll for progress until the job is complete
job.waitForCompletion(true);
Constructors
以下是 Job 类的构造函数摘要。
S.No |
Constructor Summary |
1 |
Job() |
2 |
Job(Configuration conf) |
3 |
Job(Configuration conf, String jobName) |
Methods
以下是 Job 类中一些重要的函数:
S.No |
Method Description |
1 |
*getJobName()*User-specified job name. |
2 |
*getJobState()*返回作业的当前状态。 |
3 |
*isComplete()*检查作业是否完成。 |
4 |
*setInputFormatClass()*设置作业的 InputFormat。 |
5 |
*setJobName(String name)*设置用户指定的作业名称。 |
6 |
*setOutputFormatClass()*设置作业的输出格式。 |
7 |
*setMapperClass(Class)*设置作业的映射器。 |
8 |
*setReducerClass(Class)*设置作业的化简器。 |
9 |
*setPartitionerClass(Class)*设置作业的分区程序。 |
10 |
*setCombinerClass(Class)*设置作业的合并器。 |
Mapper Class
Mapper 类定义映射作业。将输入键值对映射到一组中间键值对。映射是将输入记录转换为中间记录的单独任务。转换后的中间记录不必与输入记录的类型相同。给定的输入对可以映射到 0 个或任意多个输出对。
Reducer Class
Reducer 类在 MapReduce 中定义了 Reduce 作业。它将一组共享键的中间值减少到更小的一组值。Reducer 实现可以通过 JobContext.getConfiguration() 方法访问作业的配置。Reducer 有三个主要阶段−Shuffle、Sort 和 Reduce。
-
Shuffle − Reducer 使用 HTTP 跨网络从每个 Mapper 复制排序的输出。
-
Sort − 框架按键对 Reducer 输入进行归并排序(由于不同的 Mapper 可能输出相同的键)。Shuffle 和 sort 阶段同时发生,即在获取输出时,对其进行归并。
-
Reduce − 在此阶段,为排序输入中的每个 <key, (值的集合)> 调用 reduce (Object, Iterable, Context) 方法。