关闭

hadoop源码研究--Map (4)

标签: hadoop源码
552人阅读 评论(0) 收藏 举报
分类:
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。这些类的实现方法都很简单。

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

一步一步跟我学习hadoop(4)----hadoop Map/Reduce教程(1)

Hadoop Map/Reduce说明     hadoop Map/Reduce是一个使用简易的软件框架,基于它写出来的应用程序能够运行在由上千个商用机器组成的大型集群上,并以一种可靠容错的方式并行处理上T级别的数据集。     一个Ma...
  • wuyinggui10000
  • wuyinggui10000
  • 2015-07-19 22:47
  • 1748

Hadoop源码分析,map输入

对于MapReduce的输入输出Hadoop的官网如下所示 Input and Output types of a MapReduce job: (input)  -> map -> -> combine -> ->...
  • trumanz
  • trumanz
  • 2015-06-06 23:32
  • 846

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

分析的源码是基于Hadoop2.6.0。 官网上面的MapReduce过程 Map端shuffle的过程: 在执行每个map task时,无论map方法中执行什么逻辑,最终都是要把输出写到磁盘上。如果没有reduce阶段,则直接输出到hdfs上,如果有有reduce作业,则每个map方...
  • u010143774
  • u010143774
  • 2016-05-20 13:18
  • 20556

hadoop源码分析(MapReduce)

原文地址:http://wwangcg.iteye.com/category/171858【good 也有其他方面的内容】 hadoop 源码分析(一) jobClient 提交到JobTracker 博客分类:  hadoop hadoopjobclientjobTr...
  • anhuidelinger
  • anhuidelinger
  • 2013-10-22 15:40
  • 6022

如何在hadoop中控制map的个数

hadooop提供了一个设置map个数的参数mapred.map.tasks,我们可以通过这个参数来控制map的个数。但是通过这种方式设置map的个数,并不是每次都有效的。原因是mapred.map.tasks只是一个hadoop的参考数值,最终map的个数,还取决于其他的因素。   &#...
  • lylcore
  • lylcore
  • 2013-06-20 13:56
  • 19051

Hadoop map调优参数

参数:io.sort.mb(default 100) 当map task开始运算,并产生中间数据时,其产生的中间结果并非直接就简单的写入磁盘。 而是会利用到了内存buffer来进行已经产生的部分结果的缓存, 并在内存buffer中进行一些预排序来优化整个map的性能。 每一个map都会对应存...
  • fxdaniel
  • fxdaniel
  • 2015-12-26 20:13
  • 778

Hadoop应用——Map端Join操作

联接 使用案例 Table EMP:Name Sex Age DepNo zhang male 20 1 li female 25 2 wang female 30 3 zhou male 35 2Table DEP:DepNo DepNa...
  • lfdanding
  • lfdanding
  • 2016-05-17 16:41
  • 1002

hadoop入门级总结二:Map/Reduce

在上一篇博客:hadoop入门级总结一:HDFS中,简单的介绍了hadoop分布式文件系统HDFS的整体框架及文件写入读出机制。接下来,简要的总结一下hadoop的另外一大关键技术之一分布式计算框架:Map/Reduce。一、Map/Reduce是什么:Map/Reduce是在2004年谷歌的一篇论...
  • zbc1090549839
  • zbc1090549839
  • 2016-07-09 17:12
  • 2226

hadoop中map到reduce的过程详解

对于Hadoop的MapReduce执行机制,主要分为两部分来处理数据,mapper和reducer阶段,这两个阶段中间有一个非常重要的shuffle过程,这个过程其实是mapreduce的核心部分,因为优化过程主要就是从shuffle处下手。系统将map输出作为输入传给reducer的过程(同时会...
  • mm_bit
  • mm_bit
  • 2015-11-09 14:17
  • 3879

<hadoop>在hadoop集群的map和reduce函数中传递自定义对象

在hadoop集群中传递自定义对象
  • huahai_nb
  • huahai_nb
  • 2017-02-18 15:29
  • 788
    个人资料
    • 访问:347131次
    • 积分:3917
    • 等级:
    • 排名:第9418名
    • 原创:93篇
    • 转载:138篇
    • 译文:2篇
    • 评论:56条
    最新评论