MapReduce API


在本章中,我们将仔细研究 MapReduce 编程操作中涉及的类及其方法。我们将主要关注以下方面:

  • JobContext 接口
  • 工作类
  • 映射器类
  • 减速机类

JobContext 接口


JobContext 接口是所有类的超级接口,它在 MapReduce 中定义了不同的作业。它为你提供在任务运行时提供给任务的作业的只读视图。

以下是 JobContext 接口的子接口。

S.No. 子接口说明
1. MapContext

定义给映射器的上下文。

2. ReduceContext

定义传递给 Reducer 的上下文。

Job 类是实现 JobContext 接口的主要类。

工作类


Job 类是 MapReduce API 中最重要的类。它允许用户配置、提交、控制其执行和查询状态。 set 方法仅在提交作业之前有效,之后它们将抛出 IllegalStateException。

通常,用户创建应用程序,描述作业的各个方面,然后提交作业并监控其进度。

以下是如何提交作业的示例:

// 创建一个新的作业
Job job = new Job(new Configuration());
job.setJarByClass(MyJob.class);

// 指定各种特定于作业的参数
job.setJobName("myjob");
job.set输入Path(new Path("in"));
job.set输出Path(new Path("out"));

job.setMapperClass(MyJob.MyMapper.class);
job.setReducerClass(MyJob.MyReducer.class);

// 提交作业,然后轮询进度,直到作业完成
job.waitForCompletion(true);

构造函数

以下是 Job 类的构造函数总结。

S.No 构造函数摘要
1 Job ()
2 Job (配置配置)
3 Job (配置conf,字符串jobName)

Methods

Job类的一些重要方法如下:

S.No 方法说明
1 获取工作名称()

用户指定的作业名称。

2 获取工作状态()

返回作业的当前状态。

3 已经完成()

检查作业是否完成。

4 设置输入格式类()

设置作业的 输入Format。

5 setJobName(字符串名称)

设置用户指定的作业名称。

6 设置输出格式类()

设置作业的输出格式。

7 setMapperClass(类)

设置作业的映射器。

8 setReducerClass(类)

为作业设置减速器。

9 setPartitionerClass(类)

设置作业的分区器。

10 setCombinerClass(类)

设置作业的组合器。

映射器类


Mapper 类定义了 Map 作业。将输入键值对映射到一组中间键值对。映射是将输入记录转换为中间记录的单独任务。转换后的中间记录不必与输入记录属于同一类型。给定的输入对可以映射到零个或多个输出对。

Method

map 是 Mapper 类中最突出的方法。语法定义如下:

map(KEYIN key, VALUEIN value, org.apache.hadoop.mapreduce.Mapper.Context context)

对输入拆分中的每个键值对调用一次此方法。

减速机类


Reducer 类定义 MapReduce 中的 Reduce 作业。它将一组共享一个键的中间值减少为一组较小的值。 Reducer 实现可以通过 JobContext.getConfiguration() 方法访问作业的配置。 Reducer 具有三个主要阶段:Shuffle、Sort 和 Reduce。

  • Shuffle :Reducer 使用 HTTP 跨网络复制每个 Mapper 的排序输出。

  • Sort :框架对Reducer输入的key进行归并排序(因为不同的Mapper可能输出相同的key)。 shuffle 和 sort 阶段同时发生,即,在获取输出时,它们被合并。

  • Reduce : 在这个阶段,reduce(Object, Iterable, Context) 方法对排序后的输入中的每个 调用。

Method

reduce 是Reducer类中最突出的方法。语法定义如下:

reduce(KEYIN key, Iterable<VALUEIN> values, org.apache.hadoop.mapreduce.Reducer.Context context)

对键值对集合上的每个键调用一次此方法。