MapReduce - API

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

  • JobContext接口

  • 作业类

  • 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 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);

构造函数

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

S.NoConstructor Summary
1Job()
2Job(Configuration conf)
3Job(Configuration conf, String jobName)

方法

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

S.No方法描述
1 getJobName()

用户指定的作业名称.

2 getJobState()

返回作业的当前状态.

3 isComplete()

检查作业是否为fini是不是.

4 setInputFormatClass ()

设置作业的InputFormat.

5 setJobName(String name)

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

6 setOutputFormatClass()

设置作业的输出格式.

7 setMapperClass(Class)

设置作业的Mapper.

8 setReducerClass(Class)

设置作业的Reducer.

9 setPartitionerClass(Class)

设置作业的分区程序.

10 setCombinerClass(Class)

设置作业的Combiner.

Mapper类

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

方法

地图是最突出的方法Mapper类.语法定义如下 :

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

对于输入拆分中的每个键值对,都会调用此方法一次.

Reducer Class

Reducer类定义MapReduce中的Reduce作业.它将一组中间值与一组较小的值共享一个键. Reducer实现可以通过JobContext.getConfiguration()方法访问作业的Configuration.减速机有三个主要阶段和减号;随机,排序和减少.

  • 随机播放 :  Reducer使用网络上的HTTP复制每个Mapper的排序输出.

  • 排序 : 框架通过键合并排序Reducer输入(因为不同的Mapper可能输出相同的键).随机和排序阶段同时发生,即在提取输出时,它们被合并.

  • 减少 : 在此阶段,为每个< key,(值集合)>调用reduce(Object,Iterable,Context)方法.在已排序的输入中.

方法

reduce 是Reducer类最突出的方法.语法在下面和下面定义;

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

对于键值对集合中的每个键,都会调用一次此方法.