MapReduce API

  • MapReduce API

    在本章中,我们将仔细研究MapReduce编程操作中涉及的类及其方法。我们将主要专注于以下方面-
    • JobContext 接口
    • Job
    • Mapper
    • Reducer
  • JobContext接口

    JobContext接口是所有类的超级接口,它们在MapReduce中定义了不同的作业。它为您提供了任务运行时提供给该任务的只读视图。
    以下是JobContext接口的子接口。
    • MapContext <KEYIN,VALUEIN,KEYOUT,VALUEOUT> - 定义给映射器的上下文。
    • ReduceContext <KEYIN,VALUEIN,KEYOUT,VALUEOUT> - 定义传递给Reducer的上下文。
    Job 类 是实现JobContext接口的主要类。
  • Job 类

    Job类是MapReduce API中最重要的类。它允许用户配置作业,提交作业,控制其执行以及查询状态。set方法仅在提交Job之前有效,之后它们将抛出 IllegalStateException 异常。
    通常,用户创建应用程序,描述作业的各个方面,然后提交作业并监视其进度。
    这是一个如何提交工作的例子-
    
    // 建立一个新Job
    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类的构造函数摘要。
    • Job()
    • Job(Configuration conf)
    • Job(Configuration conf, String jobName)
    Job类的一些重要方法如下-
      getJobName() 用户指定的作业名称。 getJobState() 返回作业的当前状态。 isComplete() 检查作业是否完成。 setInputFormatClass() 设置作业的InputFormat。 setJobName(String name) 设置用户指定的作业名称。 setOutputFormatClass() 设置作业的输出格式。 setMapperClass(Class) 设置作业的映射器。 setReducerClass(Class) 设置作业的减速机。 setPartitionerClass(Class) 设置作业的分区程序。 setCombinerClass(Class) 设置作业的组合器。
  • Mapper 类

    Mapper类定义Map作业。将输入键值对映射到一组中间键值对。映射是将输入记录转换为中间记录的单个任务。转换后的中间记录不必与输入记录具有相同的类型。给定的输入对可以映射为零或许多输出对。
    mapMapper类中最突出的方法。语法定义如下-
    
    map(KEYIN key, VALUEIN value, org.apache.hadoop.mapreduce.Mapper.Context context)
    
    对于输入拆分中的每个键值对,都会调用一次此方法。
  • Reducer 类

    Reducer类在MapReduce中定义Reduce作业。它将一组共享key的中间值减少到较小的一组值。Reducer实现可以通过JobContext.getConfiguration() 方法访问作业的Configuration。Reducer具有三个主要阶段-随机,排序和缩减。
    • 随机 - Reducer使用HTTP通过网络复制每个Mapper的排序输出。
    • 排序 - 框架按键合并对Reducer输入的排序(因为不同的Mappers可能输出相同的键)。混洗和排序阶段同时发生,即,在获取输出的同时,将它们合并。
    • 缩减 - 在此阶段,对排序后的输入中的每个<key, (collection of values)>调用reduce(Object, Iterable, Context)方法。
    reduceReducer类中最突出的方法。语法定义如下-
    
    reduce(KEYIN key, Iterable<VALUEIN> values, org.apache.hadoop.mapreduce.Reducer.Context context)
    
    对于键值对集合上的每个键,都将调用此方法一次。