Map Reduce 简明教程

MapReduce - API

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

  1. JobContext Interface

  2. Job Class

  3. Mapper Class

  4. 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 个或任意多个输出对。

Method

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

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

对于输入分片中的每个键值对,此方法会被调用一次。

Reducer Class

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

  1. Shuffle − Reducer 使用 HTTP 跨网络从每个 Mapper 复制排序的输出。

  2. Sort − 框架按键对 Reducer 输入进行归并排序(由于不同的 Mapper 可能输出相同的键)。Shuffle 和 sort 阶段同时发生,即在获取输出时,对其进行归并。

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

Method

reduce 是 Reducer 类的最主要方法。其语法如下所示−

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

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