基本变量
Worker 状态机
Work Type
-
NONE:未分配
-
MATTASK:map任务
-
REDUCETASK:reduce任务
Task 状态:
-
INIT:初始化,未运行
-
RUNNING:正在运行
-
FINISHED:运行完成
Worker 状态
-
IDLE:空闲
-
INIT:已分配任务,还未通知
-
RUNNING:正在运行任务
-
DIED:故障
Request type
-
HEARTBEAT:心跳信息
-
FINISHMAP:完成map任务
-
FINISHREDUCE:完成reduce任务
Response type:
-
PONG:正常响应
-
MAPTASK:创建map任务
-
REDUCETASK:创建reduce任务
-
RESET:重启
-
EXIT:关闭
Master 原理
主要作用:
- 掌控集群所有worker的状态
- 管理任务,分发Map、Reduce任务
高可用:
-
心跳监控Worker的运行状态
-
Worker 故障:
- 重新分发任务给其他节点
并发问题:
-
Worker是并发进行请求的
运行流程:
-
Master 启动,创建RPC服务,监听服务
-
根据输入文件列表,按照文件进行Map任务的分配,创建Map任务的列表,Reduce任务的列表
-
监听到Worker加入,加入到Worker池中
- 动态扩容
- 故障恢复
-
Map任务执行:
- 有未完成的Map任务,从池中取Worker进行任务分配
- 不断更新运行状态
- 有节点宕机,重置任务进度,交给其他节点运行
- 当所有Map任务完成,进入Reduce阶段
-
Reduce任务执行:
- 有未完成的Reduce任务,从池中取Worker进行任务分配
- 不断更新运行状态
- 有节点宕机,重置任务进度,交给其他节点运行
- 当所有Map任务完成,进入End阶段
-
End阶段:
-
关闭所有Worker
-
Worker 原理
主要作用:
-
运行 Master 安排的Map或者Reduce任务
运行流程:
-
Worker 启动,定时向Master发起心跳请求
-
接收到退出通知:结束进程
-
接收到Map任务通知:
- 接收文件路径,读取
- 遍历文件,执行map操作
- 根据hash将数据存入不同的临时文件
- 完成所有操作,修改临时文件名称,通知master结果文件列表
-
接收Reduce任务
-
接收文件列表,读取文件
-
遍历文件,执行Reduce任务,输出结果到临时文件
-
执行完成,修改临时文件名称,返回Master文件位置
-
高可用的问题
-
Worker异常,Master重新分配任务,如果之前的Worker还在执行,发生写文件重复?
- 临时文件名:mr-X-Y.tmp,其中X是Worker节点编号,避免了写入同一临时文件
- 运行结束,重命名前,如果发现已经存在,说明被重复执行,就直接退出即可
-
节点异常后再恢复