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)
对键值对集合上的每个键调用一次此方法。