`
zy19982004
  • 浏览: 654231 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
F6f66edc-1c1a-3859-b76b-a22e740b7aa7
Hadoop学习
浏览量:249827
社区版块
存档分类
最新评论

Hadoop学习三十五:Hadoop-MapReduce MapTask and ReduceTask

 
阅读更多

一.上文

      http://zy19982004.iteye.com/blog/2037549从整体上描述了Job执行的过程,大致分为三步

  1. 准备数据
  2. map reduce
  3. 清理

     其中最主要的当然是map reduce的过程,map由MapTask主导完成,reduce由ReduceTask主导完成。先看看官方给的一个图

 

二.MapTask

      MapTask分为以下几步

  1. Read:从InputSplit中读取数据,解析出一个个key/value。
  2. Map:由自定义的Mapper类处理上述key/value。处理结果也是key/value形式。
  3. Write或者叫Collect:MapContext将处理结果写入环形内存缓冲区kvbuffer。
  4. Combine(如果有Combine的话) & SortAndSpill:当MapTask的输出结果很多时,就可能会撑爆内存,所以需要在一定条件下将缓冲区中的数据临时写入磁盘,然后重新利用这块缓冲区。这个从内存往磁盘写数据的过程被称为Spill,中文可译为溢写,字面意思很直观。这个溢写是由单独线程来完成,不影响往缓冲区写map结果的线程。溢写线程启动时不应该阻止map的结果输出,所以整个缓冲区有个溢写的比例spillper。这个比例默认是0.8,也就是当缓冲区的数据已经达到阈值(kvbuffer.length * spillper = 100MB * 0.8 = 80MB),溢写线程启动,锁定这80MB的内存,执行溢写过程。Map task的输出结果还可以往剩下的20MB内存中写,互不影响。可以参考类MapTask init方法
    final float spillper =job.getFloat(JobContext.MAP_SORT_SPILL_PERCENT, (float)0.8);
    final int sortmb = job.getInt(JobContext.IO_SORT_MB, 100);
    int maxMemUsage = sortmb << 20;//100M
    kvbuffer = new byte[maxMemUsage];
    softLimit = (int)(kvbuffer.length * spillper);
    bufferRemaining = softLimit;
     另外补充一点,如果有Combine,在这一步也会起作用,参考sortAndSpill方法
    //如果combiner为空,则直接写入文件
    
        if (null == combinerClass) {
    
            ……
    
            writer.append(key, value);
    
            ++spindex;
    
         }
    
         else {
    
            ……
    
            //如果combiner不为空,则先combine,调用combiner.reduce(…)函数后再写入文件
    
            combineAndSpill(kvIter, combineInputCounter);
    
         }
    
     在http://zy19982004.iteye.com/blog/2037549的基础上补充一张图,这个图就是spill过程。
  5. Combine(如果有Combine的话) & Merge:当一个MapTask即将完成时,可能生成多个spill文件,需要将这些spill文件进行合并,生成一个file.out文件。可以参考MapTask mergeParts方法。

 

三.ReduceTask

     ReduceTask分为以下几步

  1. Copy(也称Shuffle):如果是Local模式,直接mv & rename;如果是集群模式,则通过HTTP请求copy数据,ReduceTask从各个MapTask上远程拷贝属于自己的那一片数据,放到内存里,如果超过阀值,写入磁盘。
  2. Merge & Sort:在远程copy的过程中,需要将多个属于自己的那一片合并成一块数据,并排序;因为每片已经是排序的,所以只需要一次归并排序即可。
  3. Reduce:由自定义的Reduce类,将数据写入Hdfs。

四.自己画了其中几个步骤

  1. MapTask Spill
  2. MapTask Merge & Combine
  3. ReduceTask Copy Merge & Sort

五.对spill的进一步理解

     test-data.txt是145M,被分成两个InputSplit(仅仅是逻辑划分)。

     MapTask1处理hdfs://192.168.1.200:9000/user/root/input/test-data.txt:0+134217728,MapTask2处理hdfs://192.168.1.200:9000/user/root/input/test-data.txt:134217728+18093772。

     按理80M就开始spill的话,MapTask最多只有两个spill啊,为什么现在出现了四个(三个如上图,还有一个是在RecordWriter.close(mapperContext)时将内存flush到硬盘)。因为kvbuffer的结构并不只是存放了key/value,kvbuffer中一部分是存储诸如partitioner这样的kvmeta。

kvmeta.put(kvindex + PARTITION, partition);
kvmeta.put(kvindex + KEYSTART, keystart);
kvmeta.put(kvindex + VALSTART, valstart);
kvmeta.put(kvindex + VALLEN, distanceTo(valstart, valend));

     对于kvbuffer的结构,我就不深究了。可以参考http://caibinbupt.iteye.com/blog/401374的几篇博客,虽然他读的不是Hadoop2.2.0。

     另外也可以参考这个图,来自http://www.cnblogs.com/forfuture1978/archive/2010/11/19/1882268.html

 

 

 

     以上就是我对MapTask和ReduceTask的一些肤浅认识。我写的每一篇文章都希望在保证正确的基础上更加通俗易懂。如有错误之处措辞不当等,欢迎指出。

4
3
分享到:
评论

相关推荐

    Optimizing Hadoop for MapReduce(PACKT,2014)

    You will also learn about optimizing map and reduce tasks by using Combiners and compression. The book ends with best practices and recommendations on how to use your Hadoop cluster optimally. What...

    最新Hadoop的面试题总结

    (1)Copy阶段:ReduceTask从各个MapTask上远程拷贝一片数据,并针对某一片数据,如果其大小超过一定阈值,则写到磁盘上,否则直接放到内存中。 (2)Merge阶段:在远程拷贝数据的同时,ReduceTask启动了两个后台...

    大数据学习(九):mapreduce编程模型及具体框架实现

    map reduce编程模型把数据运算流程分成2个阶段  阶段1:读取原始数据,形成key-value数据(map方法)  阶段2:将阶段1的key-value数据按照相同key分组聚合(reduce方法) mapreduce编程模型软件的具体实现:  hadoop中...

    Hadoop从入门到上手企业开发

    近百节课视频详细讲解,需要的小伙伴自行百度网盘下载,链接见附件,...064 源代码跟踪查看Map Task和Reduce Task数目的个数 065 回顾MapReduce执行过程以及MapReduce核心 066 Hadoop MapReduce框架数据类型讲解 067

    kafka-hadoop-loader-my:kafka0.8.2使用简单的消费者负载消息使用自定义mapreduce进入hdfs

    实际使用者及其内部提取程序线程都包装为KafkaInputContext,它是为每个Map Task的记录读取器对象创建的。 然后,映射器接收最不利的消息对,解析日期的内容并发出(date,message),然后由Output Format拾取并在...

    hadoop 权威指南(第三版)英文版

    hadoop权威指南第三版(英文版)。 Foreword . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii Preface . . . . . . ....

    MapReduce详解包括配置文件

    MapReduce是Hadoop提供的一套用于进行分布式计算的模型,本身是Doug Cutting根据Google的&lt;MapReduce: Simplified Data Processing on Large Clusters&gt;...MapTask处理完数据之后,会将数据交给ReduceTask进行汇总。Red

    hadoop 1.2.1 api 最新chm 伪中文版

    一个Map/Reduce 作业(job) 通常会把输入的数据集切分为若干独立的数据块,由 map任务(task)以完全并行的方式处理它们。框架会对map的输出先进行排序, 然后把结果输入给reduce任务。通常作业的输入和输出都会被...

    hadoop_the_definitive_guide_3nd_edition

    Hadoop definitive 第三版, 目录如下 1. Meet Hadoop . . . 1 Data! 1 Data Storage and Analysis 3 Comparison with Other Systems 4 RDBMS 4 Grid Computing 6 Volunteer Computing 8 A Brief History of Hadoop 9...

    22、MapReduce使用Gzip压缩、Snappy压缩和Lzo压缩算法写文件和读取相应的文件

    22、MapReduce使用Gzip压缩、Snappy压缩和Lzo压缩算法写文件和读取相应的文件 网址:https://blog.csdn.net/chenwewi520feng/article/details/130456088 本文的前提是hadoop环境正常。 本文最好和MapReduce操作常见...

    java大数据作业_1云计算、大数据、hadoop

    课后作业 1.SAAS、PAAS、IAAS、XAAS都是什么意思?另外猜猜DAAS是什么意思? 2.大数据的4个特点是什么? 3.虚拟机与主机构成闭环局域网...Map Task Capacity Reduce Task Capacity Queue Name 10.如何启动一个datanode

    2018最新BAT大数据面试题.docx

    3)很多人的误解在 Map 阶段,如果不使用 Combiner便不会排序,这是错误的,不管你用不用 Combiner,Map Task 均会对产生的数据排序(如果没有 Reduce Task,则不会排序,实际上 Map 阶段的排序就是为了减轻 Reduce...

    Hadoop中MapReduce基本案例及代码(三)

    分区Partitioner 分区操作是shuffle操作中的一个重要过程,作用就是将map的结果按照规则分发到不同reduce中进行处理,从而...注:默认情况下,reduceTask数量为1 很多时候MR自带的分区规则并不能满足我们需求,为了实

    MapReduceV1:JobTracker端Job/Task数据结构

    在编写MapReduce程序时,我们是以Job为单位进行编程处理,一个应用程序可能由一组Job组成,而MapReduce框架给我们暴露的只是一些Map和Reduce的函数接口,在运行期它会构建对应MapTask和ReduceTask,所以我们知道一个...

    拥抱大数据——初识Hadoop,轻松应对海量数据存储与分析所带来的挑战

    4.1 Map+Reduce 4.2 MapReduce架构 4.3 MapReduce数据处理 4.3.1 job与task 4.3.2 MapReduce数据处理 五、YARN(资源管理系统) 5.1 YARN架构 六、手把手搭建Hadoop环境(Linux上) 6.1 安装jdk 6.2 安装hadoop 6.3

    forcombiner_reduce_java_mapReduce_markizj_yourselfarq_源码

    Map Reduce中的Combiner就是为了避免map任务和reduce任务之间的数据传输而设置的,Hadoop允许用户针对map task的输出指定一个合并函数。即为了减少传输到Reduce中的数据量。它主要是为了削减Mapper的输出从而减少...

    sigmod2011全部论文(3)

    RAFT at Work: Speeding-Up MapReduce Applications Under Task and Node Failures (Page 1225) Jorge-Arnulfo Quiané-Ruiz (Saarland University) Christoph Pinkel (Saarland University) Jörg Schad (Saarland ...

    Hbase中文文档

    7.1. Map-Task Spitting 7.2. HBase MapReduce Examples 7.3. Accessing Other HBase Tables in a MapReduce Job 7.4. Speculative Execution 8. HBase安全 8.1. 安全客户端访问 HBase 8.2. 访问控制 9. 架构 9.1. ...

Global site tag (gtag.js) - Google Analytics