Hadoop MapReduce 架构
hadoop MapReduce 采用了Master/Slave架构,具体如下图所示。它主要由以下几个组件组成:Client、JobTracker、TaskTracker和Task。
1.Client
用户编写的Map Reduce程序通过Client提交到Job Tracker端;同时 ,用户可以通过Client提供的一些接口查看作业运行状态。在Hadoop内部用“作业”(Job)来表示Map Reduce程序。一个Map Reduce程序可对应若干个作业,每个作业会被分解成若干个Map/Reduce任务(Task)。
2. JobTracker
JobTracker主要负责资源监控和作业调度。Job Tracker监控所有的TaskTracker与作业的健康状况,一旦发现失败情况后,会将相应的任务转移到其它节点;同时,Job Tracker会跟踪任务的执行进度、资源使用量等信息,并将这些信息告诉任务调度器,而调度器会在资源出现空闲时,选择合适的任务使用这些资源。在Hadoop中任务调度器是一个可插拔的模块,用户可以根据自己的需求设计相应的调度器。
3. TaskTracker
Task Tracker会周期性的通过HeartBeat将本届电商资源的使用情况和任务的运行进度汇报给Job Tracker,同时接受Job Tracker发送过来的命令并执行相应的操作(如启动新任务、杀死任务等)。Task Tracker使用“slot”等量划分本节点上的资源量。“slot”代表计算资源(如CPU、内存等)。一个Task获取到一个slot后才有机会运行,而Hadoop调度器的作用就是将各个Task Tracker上的空闲slot分配给Task使用。slot分为Map slot和Reduce slot两种,分别公Map Task和Reduce Task使用,Task Tracker通过slot数目限定Task的并发度。
4. Task
Task分为Map Task和Reduce Task两种,均由Task Tracker启动。
- Map Task执行过程
Map Task湘江对应的源数据迭代解析成一个个key/value对,依次调用用户自定义的map()函数进行处理,最终将临时结果存放到本地磁盘上,其中临时数据被分成若干个partition,每个partition将被一个Reduce Task处理。 - Reduce Task执行过程
该过程分为三个阶段:(1)从远程节点上读取Map Task中间结果(称为“shuffle阶段”);(2)按照key对key/value对进行排序(称为“sort阶段”);(3)一次读取<key,value list>,调用用户自定义的reduce()函数处理,并将最终结果存到HDFS上(称为“reduce阶段”).