深入理解hadoop之MapReduce

与HDFS一样,Hadoop MapReduce也是采用了Master/Slaves(M/S)架构。主要组件有Client、JobTracker、TaskTracker和Task。下面分别对几个组件介绍

  

(1).Client:用户编写的MapReduce程序通过Client提交到JobTracker端;同时,用户可以通过Client端提供的接口查看作业运行状态。在Hadoop内部用Job表示MapReduce程序。一个MapReduce程序可对应若干个作业,而且每个作业会被分解为若干个Map/Reduce任务

(2)Job Tracker:主要负责资源监控和作业的调度。JobTracker监控所有TaskTracker与作业的健康状况,一旦发现失败情况后,就会将相应的任务转移到其他节点上去,同时JobTracker会跟踪任务的执行进度、资源使用量等信息,并将这些信息告诉任务调度器,任务调度器会在资源出现空闲的时候,选择合适的任务使用这些资源。任务调度器是一个可以插拔的资源,用户可以根据自己需要的需要设计相应的资源调度器

(3)TaskTracker:周期性的通过Heartbeat将本节点的资源使用情况和任务运行进度发送给JobTracker,同时会接收JobTracker发送来的命令并执行相应的操作。TaskTracker使用slot等量划分本节点的资源量。slot代表计算资源。一个Task获取一个slot后才有机会运行,而Hadoop调度器的作用是将多个TaskTracker上的空闲slot分配给Task使用,slot分为Map slot和Reduce slot两种,分别提供Map Task和Reduce Task使用。TaskTracker通过slot数目限定Task的并发度

(4)Task:分为Map Task和Reduce Task两种,均由Task Tracker启动。因为HDFS以固定大小的block为基本单位进行存储数据,对于MapReduce而言,其处理单位是split。split与block关系对应为下图,split是一个逻辑概念,他只包含一些元数据信息,比如数据起始位置、数据长度、数据所在的节点等信息。划分方法由用户自己决定,但是需要注意的是:split的多少决定了Map Task的数目,因为每个split会交给一个Map Task进行执行

(5)Map Task执行的过程如下图所示。Map Task先对split进行迭代解析成一个个key/value对,依次调用用户自定义的map()函数进行处理,最终将临时结果存放到磁盘上,其中临时数据被划分成一个个partition,每个partition将被一个Reduce Task处理。

Reduce Task执行的过程如下图所示。也分为三个阶段:(1)从远程节点读取Map Task中间结果(称之为shuffle阶段)

                          (2)按照key对key/value对进行排序(称之为Sort阶段)

                          (3)依次读取<key,value list>,调用用户自定义的reduce()函数,将最终结果存放到HDFS上。

原文地址:https://www.cnblogs.com/bigdata-stone/p/9647375.html