Hadoop深入学习:Map Task和Reduce Task的执行流程

        本节我们主要看一下Map Task和Reduce Task的执行流程:


        好了,接下来我们再看看Map Task和Reduce Task的一个完整的执行流程:
        1)、TaskNode节点启动分配JobTracker个Map Task任务,启用InputFormat对象(具体为RecordReader)读取分配给本节点split分片,将每一行的数据读取成key/value键值对;
        2)、mapper程序的map()函数会接收key/value键值对的数据,做逻辑处理,然后将之输出;
        3)、(开始MapReduce的shuffle过程,该过程的性能的好坏可以直接决定MapReduce的性能。)mapper程序会将经处理过的key/value数据先加入该Task的环形的内存缓冲区,直到达到缓存达到阀值,然后会将数据spill到linux的本地磁盘上(注意,这些中间数据不会被保存到HDFS),生成一个磁盘文件;
        4)、mapper处理玩自己分片的数据后,会将磁盘上的所有spill文件合并;
        5)、当一个Map Task任务处理完后,TaskTracker节点会告诉JobTracker节点任务执行完毕并等待新的任务,然后JobTracker会告知reducer程序,区获取属于reducer自己的数据;
        (注:第3 - 5步是Map断的shuffle阶段。)
        6)、reducer通过多线程(默认为5个copy线程)开始到已执行完成的mapper节点上copy属于自己的partition数据;
        7)、reducer会先将copy的数据先放在本机的内存缓存中,合并拷贝数据,当缓存中放不下copy数据时,会将内丛中的的数据刷新到磁盘上,数据copy完成后,会将虽有数据合并成一个大文件,数据格式由原来的<key,value>变成<key,value list>;
        8)、将合并后的文件排序;
        (注:第6 - 8步是Map断的shuffle阶段。)
        9)、接下来reducer开始执行业务逻辑处理的reduce()方法,并将数据最终输出到HDFS上。
        10)、所有的Task都执行完成后,整个处理过程完成。

猜你喜欢

转载自flyingdutchman.iteye.com/blog/1876189
今日推荐