mapreduce1 的工作机制中主要角色分别是客户端、jobtracker、tasktracker。
Jobtracker 协调作业的运行
tasktracker 负责运行作业划分后的任务
流程如下:
- 客户端向 jobtracker 请求一个新的作业,检查作业的输出路径是否存在,若存在则抛出异常。然后 jobtracker 向客户端返回 job 相关资源的提交路径以及 jobid
- 客户端将 job 所需的资源(jar 文件、配置文件)提交到共享文件系统(hdfs)
- 告知 jobtracker 已将 job 复制到共享文件系统,准备执行
- jobtracker 将提交的 job 放入内部的任务队列,由作业调度器进行调度,并进行初始化(包括创建一个表示正在运行作业的对象,用于封装任务和记录信息)
- jobtracker 的作业调度从共享文件系统获取客户端计算好的输入分片,以创建任务运行列表
- tasktracker 通过心跳与 jobtracker 保持通信,报告自己的状态,以及是否准备好运行一个 task,若是则 jobtracker 通过一定的调度算法从任务队列中取出一个 task 分配给 tasktracker
- tasktracker 在共享文件系统中获得任务相关资源,实现 jar 本地化,并创建一个本地工作目录以及一个 taskrunner 运行该任务
- taskrunner 启动一个新的 jvm
- 在新启动的 jvm 中运行任务
- 进度与状态的更新:有一个独立的线程向 tasktracker 报告当前任务的状态。同时 tasktracker 每隔 5 秒通过心跳向 jobtracker 发送状态。jobtracker 将这些更新合并,发送给客户端。