- MapReduce 教程
- MapReduce - 首页
- MapReduce - 简介
- MapReduce - 算法
- MapReduce - 安装
- MapReduce - API
- MapReduce - Hadoop 实现
- MapReduce - 分区器
- MapReduce - 组合器
- MapReduce - Hadoop 管理
- MapReduce 资源
- MapReduce - 快速指南
- MapReduce - 有用资源
- MapReduce - 讨论
MapReduce - API
在本章中,我们将仔细研究参与 MapReduce 编程操作的类及其方法。我们将主要关注以下内容:
- JobContext 接口
- Job 类
- Mapper 类
- Reducer 类
JobContext 接口
JobContext 接口是所有类的超级接口,它定义了 MapReduce 中的不同作业。它提供了作业的只读视图,这些视图在任务运行时提供给任务。
以下是 JobContext 接口的子接口。
| 序号 | 子接口描述 |
|---|---|
| 1. | MapContext<KEYIN, VALUEIN, KEYOUT, VALUEOUT>
定义提供给 Mapper 的上下文。 |
| 2. | ReduceContext<KEYIN, VALUEIN, KEYOUT, VALUEOUT>
定义传递给 Reducer 的上下文。 |
Job 类是实现 JobContext 接口的主要类。
Job 类
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);
构造函数
以下是 Job 类的构造函数摘要。
| 序号 | 构造函数摘要 |
|---|---|
| 1 | Job() |
| 2 | Job(Configuration conf) |
| 3 | Job(Configuration conf, String jobName) |
方法
Job 类的一些重要方法如下:
| 序号 | 方法描述 |
|---|---|
| 1 | getJobName()
用户指定的作业名称。 |
| 2 | getJobState() 返回作业的当前状态。 |
| 3 | isComplete() 检查作业是否已完成。 |
| 4 | setInputFormatClass() 设置作业的 InputFormat。 |
| 5 | setJobName(String name) 设置用户指定的作业名称。 |
| 6 | setOutputFormatClass() 设置作业的 Output Format。 |
| 7 | setMapperClass(Class) 设置作业的 Mapper。 |
| 8 | setReducerClass(Class) 设置作业的 Reducer。 |
| 9 | setPartitionerClass(Class) 设置作业的 Partitioner。 |
| 10 | setCombinerClass(Class) 设置作业的 Combiner。 |
Mapper 类
Mapper 类定义了 Map 作业。将输入键值对映射到一组中间键值对。映射是将输入记录转换为中间记录的单个任务。转换后的中间记录的类型不必与输入记录相同。给定的输入对可以映射到零个或多个输出对。
方法
map 是 Mapper 类中最突出的方法。语法定义如下:
map(KEYIN key, VALUEIN value, org.apache.hadoop.mapreduce.Mapper.Context context)
此方法对输入拆分中的每个键值对调用一次。
Reducer 类
Reducer 类定义了 MapReduce 中的 Reduce 作业。它将共享一个键的一组中间值减少到一组较小的值。Reducer 实现可以通过 JobContext.getConfiguration() 方法访问作业的 Configuration。Reducer 有三个主要阶段:Shuffle、Sort 和 Reduce。
Shuffle - Reducer 使用 HTTP 通过网络复制来自每个 Mapper 的排序输出。
Sort - 框架按键合并排序 Reducer 输入(因为不同的 Mapper 可能会输出相同的键)。shuffle 和 sort 阶段同时发生,即在获取输出的同时,它们也会合并。
Reduce - 在此阶段,对排序输入中的每个 <key, (值集合)> 调用 reduce (Object, Iterable, Context) 方法。
方法
reduce 是 Reducer 类中最突出的方法。语法定义如下:
reduce(KEYIN key, Iterable<VALUEIN> values, org.apache.hadoop.mapreduce.Reducer.Context context)
此方法对键值对集合上的每个键调用一次。