Mapper与Reducer浅析

一、      Mapper

Mapper接口负责数据处理阶段,它采用的形式为Mapper<K1,V1,K2,V2>Java泛型,这里键类和值类分别实现WritableComparable和Writable接口。

Mapper只有一个方法—map,用于处理一个单独的键、值对。

Void map(K1key,V1 value,OutputCollector<K2,V2> output,Reporter reporter) throwsIOException该函数处理一个给定的键/值对(K1,V1),生成一个键/值对(K2,V2)的列表(该列表也可能为空),OutputCollector接收这个映射过程的输出,Reportor可提供对Mapper相关附加信息的记录,形成任务进度。

Mapper中包含的两个主要方法:

1、        void configure(JobConfjob) 该函数提取XML配置文件或者应用程序主类中的参数,在数据处理前调用。

2、        void close(),map任务结束前的最后一个操作,该函数完成所有的收尾工作,如:关闭数据库连接、打开文件等。

二、      Reducer

Reduce的实现和mapper一样必须首先在MapReduce基类上扩展,允许配置和清理,还必须实现Reducer接口,使其具有如下的单一方法:

Void reduce(K2key,Iterator<V2> values,OutputCollector<K3,V3> output,Reporterreporter) throwsIOException

当reducer任务接收来自各个mapper的输出时,它按照键/值对中键对输入数据进行排序,并将相同键的值归并。然后调用reduce()函数,并通过迭代处理那些与指定键相关联的值,生成一个(可能为空的)列表(K3,V3).OutputCollector 接收reduce阶段的输出,并写入输出文件,Reporter可提供reducer相关的附加信息的记录,形成任务进度。

Partitioner:重定向Mapper输出(map和reduce两个阶段之间极其重要的步骤)。

原文地址:https://www.cnblogs.com/jingpeng77/p/9942045.html

时间: 2024-10-13 21:19:55

Mapper与Reducer浅析的相关文章

关于Mapper、Reducer的个人总结(转)

Mapper的处理过程: 1.1. InputFormat 产生 InputSplit,并且调用RecordReader将这些逻辑单元(InputSplit)转化为map task的输入.其中InputSplit是map task处理的最小输入单元的逻辑表示. 1.2. 在客户端代码中调用Job类来设置参数,并执行在hadoop集群的上的MapReduce程序. 1.3. Mapper类在Job中被实例化,并且通过MapContext对象来传递参数设置.可以调用Job.getConfigurat

运用MRUnit测试mapper和reducer

MRUnit可以花费时间少,并且可以分别测试mapper和reducer 步骤: 1.  运用MRUnit测试mapper和reducer 2.  执行mapreduce代码的本地化测试 3.  使用hadoop日志 4.  通过计数器跟踪执行指标 Testing Mapper的过程 1.  实例化mapdirver类,作为测试中mapper被参数化 2.  调用withmapper方法来添加想要测试的mapper实例 3.  根据情况选择withconfiguration方法设置mapper的

Hadoop-2.4.1学习之Mapper和Reducer

MapReduce允许程序员能够容易地编写并行运行在大规模集群上处理大量数据的程序,确保程序的运行稳定可靠和具有容错处理能力.程序员编写的运行在MapReduce上的应用程序称为作业(job),Hadoop既支持用Java编写的job,也支持其它语言编写的作业,比如Hadoop Streaming(shell.python)和Hadoop Pipes(c++).Hadoop-2.X不再保留Hadoop-1.X版本中的JobTracker和TaskTracker组件,但这并不意味着Hadoop-2

Mapper类/Reducer类中的setup方法和cleanup方法以及run方法的介绍

在hadoop的源码中,基类Mapper类和Reducer类中都是只包含四个方法:setup方法,cleanup方法,run方法,map方法.如下所示: 其方法的调用方式是在run方法中,如下所示: 可以看出,在run方法中调用了上面的三个方法:setup方法,map方法,cleanup方法.其中setup方法和cleanup方法默认是不做任何操作,且它们只被执行一次.但是setup方法一般会在map函数之前执行一些准备工作,如作业的一些配置信息等:cleanup方法则是在map方法运行完之后最

MapReduce源码分析:Mapper和Reducer类

一:Mapper类 在Hadoop的mapper类中,有4个主要的函数,分别是:setup,clearup,map,run.代码如下: protected void setup(Context context) throws IOException, InterruptedException { // NOTHING } protected void map(KEYIN key, VALUEIN value, Context context) throws IOException, Interr

[hadoop入门]mapper与reducer

1.mapper #!/usr/bin/env python import sys for line in sys.stdin: line = line.strip() words = line.split() for word in words: print "%s\t%s" % (word, 1) 2.reducer #!/usr/bin/env python from operator import itemgetter import sys current_word = Non

hadoop2.7之Mapper/reducer源码分析

一切从示例程序开始: 示例程序 Hadoop2.7 提供的示例程序WordCount.java package org.apache.hadoop.examples; import java.io.IOException; import java.util.StringTokenizer; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.

Hadoop OutputFormat浅析

问题:reduce输出时,如果不是推测任务写结果时会先写临时目录最后移动到输出目录吗? 下面部分转自Hadoop官网说明 OutputFormat 描述Map/Reduce作业的输出样式. Map/Reduce框架根据作业的OutputFormat来: 检验作业的输出,例如检查输出路径是否已经存在. 提供一个RecordWriter的实现,用来输出作业结果. 输出文件保存在FileSystem上. TextOutputFormat是默认的 OutputFormat. 任务的Side-Effect

Hadoop-2.4.1学习之怎样确定Mapper数量

MapReduce框架的优势是能够在集群中并行运行mapper和reducer任务,那怎样确定mapper和reducer的数量呢,或者说怎样以编程的方式控制作业启动的mapper和reducer数量呢?在<Hadoop-2.4.1学习之Mapper和Reducer>中以前提及建议reducer的数量为(0.95~1.75 ) * 节点数量 * 每一个节点上最大的容器数,并可用法Job.setNumReduceTasks(int).mapper的数量由输入文件的大小确定.且没有相应的setNu