MapReduce - API

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

  • JobContext 接口
  • Job 类
  • Mapper 类
  • Reducer 类

JobContext 接口

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

以下是 JobContext 接口的子接口。

S.No. 子接口说明
1. MapContext<KEYIN, VALUEIN, KEYOUT, VALUEOUT>

定义提供给 Mapper 的上下文。

2. ReduceContext<KEYIN, VALUEIN, KEYOUT, VALUEOUT>

定义传递给Reducer。

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

Job 类

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

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

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

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

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

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

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

构造函数

以下是 Job 类的构造函数摘要。

S.No 构造函数摘要
1 Job()
2 Job(Configuration conf)
3 Job(Configuration conf, String jobName)

方法

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

S.No 方法说明
1 getJobName()

用户指定的作业名称。

2 getJobState()

返回作业的当前状态。

3 isComplete()

检查作业是否完成。

4 setInputFormatClass()

设置作业的 InputFormat。

5 setJobName(String name)

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

6 setOutputFormatClass()

设置作业的输出格式。

7 setMapperClass(Class)

设置作业的 Mapper。

8 setReducerClass(Class)

设置作业的 Reducer作业。

9 setPartitionerClass(Class)

设置作业的分区器。

10 setCombinerClass(Class)

设置作业的组合器。

Mapper 类

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

方法

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

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

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

Reducer 类

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

  • Shuffle − Reducer 使用网络上的 HTTP 从每个 Mapper 复制排序后的输出。

  • Sort − 框架按键合并排序 Reducer 输入(因为不同的 Mapper 可能输出相同的键)。洗牌和排序阶段同时发生,即在获取输出的同时,它们被合并。

  • Reduce − 在此阶段,将为每个 <key, (值集合)> 调用 reduce (Object, Iterable, Context) 方法。在排序的输入中。

方法

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

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

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