MapReduce1的工作机制中,角色主要包括客户端, Jobtracker,Tasktracker
Jobtracker主要是协调作业的运行;而Tasktracker是负责运行作业划分之后的任务。
MapReduce过程:
1.首先是由客户端向Jobtracker请求一个新的作业,Jobtracker会检查作业的输出路径是否存在。若存在则抛出异常。若不存在的话,Jobtracker会向客户端返回job相关资源的提交路径以及jobID。
2.接下来就是客户端会将job所需的资源(jar文件,配置文件)提交到共享文件系统。并告知Jobtracker已将job复制到共享文件系统,准备执行。
3.Jobtracker将提交的Job放入内部的任务队列,由作业调度器进行调度,并进行初始化(包括创建一个表示正在运行作业的容器,用于封装任务和记录信息)
4.之后jobtracker的作业调度器从共享文件系统获取客户端计算好的输入切片,以创建任务运行列表
5.Tasktracker通过心跳与Jobtracker保持通信,报告自己的状态,以及是否准备好运行一个task,若准备好 ,Jobtracker则通过一定的调度算法从Jobtracker中获得一个task分配给Tasktracker。
6.Tasktracker在共享文件系统中获得任务相关资源,实现jar本地化,并创建响应的文件夹以及一个taskrunner运行该任务。
7.taskrunnr会启动一个新的JVM,在新启动的JVM中运行任务。
进度与状态的更新:有一个独立的线程向tasktracker报告当前任务状态。同时Tasktracker每隔5s向Jobtracker通过心跳发送状态。JobTracker将这些更新合并,发送给客户端。