【MIT 6.824】lab1:MapReduce设计

79 阅读2分钟

基本变量

Worker 状态机

image.png

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节点编号,避免了写入同一临时文件
    • 运行结束,重命名前,如果发现已经存在,说明被重复执行,就直接退出即可
  • 节点异常后再恢复