hadoop源码研究--Map (4)

转载 2013年12月03日 10:12:02
Hadoop的MapReduce框架中,Map动作通过Mapper类来抽象。一般来说,我们会实现自己特殊的Mapper,并注册到系统中,执行时,我们的Mapper会被MapReduce框架调用。

内部类Context继承自MapContext,并没有引入任何新的方法。

Mapper的四个方法是setup,map,cleanup和run。其中,setup和cleanup用于管理Mapper生命周期中的资源,setup在完成Mapper构造,即将开始执行map动作前调用,cleanup则在所有的map动作完成后被调用。方法map用于对一次输入的key/value对进行map动作。run方法执行了上面描述的过程,它调用setup,让后迭代所有的key/value对,进行map,最后调用cleanup。

org.apache.hadoop.mapreduce.lib.map中实现了Mapper的三个子类,分别是InverseMapper(将输入<key, value> map为输出<value, key>),MultithreadedMapper(多线程执行map方法)和TokenCounterMapper(对输入的value分解为token并计数)。其中最复杂的是MultithreadedMapper,我们就以它为例,来分析Mapper的实现。

MultithreadedMapper会启动多个线程执行另一个Mapper的map方法,它会启动mapred.map.multithreadedrunner.threads(配置项)个线程执行Mapper:mapred.map.multithreadedrunner.class(配置项)。MultithreadedMapper重写了基类Mapper的run方法,启动N个线程(对应的类为MapRunner)执行mapred.map.multithreadedrunner.class(我们称为目标Mapper)的run方法(就是说,目标Mapper的setup和cleanup会被执行多次)。目标Mapper共享同一份InputSplit,这就意味着,对InputSplit的数据读必须线程安全。为此,MultithreadedMapper引入了内部类SubMapRecordReader,SubMapRecordWriter,SubMapStatusReporter,分别继承自RecordReader,RecordWriter和StatusReporter,它们通过互斥访问MultithreadedMapper的Mapper.Context,实现了对同一份InputSplit的线程安全访问,为Mapper提供所需的Context。这些类的实现方法都很简单。

相关文章推荐

Hadoop中Map端shuffle过程及源码解析

分析的源码是基于Hadoop2.6.0。 官网上面的MapReduce过程 Map端shuffle的过程: 在执行每个map task时,无论map方法中执行什么逻辑,最终都是要把输出写...

Hadoop源码分析,map输入

对于MapReduce的输入输出Hadoop的官网如下所示 Input and Output types of a MapReduce job: (input)  -> map -> -> comb...

Hadoop-2.4.1学习之Map任务源码分析(下)

对Map任务的SORT阶段源代码进行了学习和分析

hadoop源码研究 -M/R(1)

InputFormat   将输入的数据集切割成小数据集 InputSplits, 每一个 InputSplit 将由一个 Mapper 负责处理。此外 InputFormat 中还提供一个...

hadoop源码研究--output (5)

Map的结果,会通过partition分发到Reducer上,Reducer做完Reduce操作后,通过OutputFormat,进行输出,下面我们就来分析参与这个过程的类。 Mappe...

Hadoop-2.4.1学习之Map任务源码分析(上)

通过源代码分析了Map任务的map阶段

【caffe源码研究】第二章:使用篇(4) : python接口

本小节介绍一下python的使用接口。python接口的调用需要在编译正确python接口的环境下,详见安装篇。make pycaffe一、画网络结构图使用python接口的draw_net.py可以...

Mybatis源码研究4:日志框架的实现

一、logging包的概述 本包主要依赖了 Mybatis的reflection包的ExceptionUtil和io包的Resources, 以及第三方的Log4j,Slf4j,CommonsLog...

Mybatis源码研究4:日志框架的实现

一、logging包的概述 本包主要依赖了 Mybatis的reflection包的ExceptionUtil和io包的Resources, 以及第三方的Log4j,Slf4j,CommonsL...

4.Unity3D商业游戏源码研究-变身吧主公-UIBase

using UnityEngine; using System.Collections; using System.Collections.Generic;public class UIBase : ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)