MIT6.5840(6.824) Lec01笔记: MapReduce论文解读

课程主页: https://pdos.csail.mit.edu/6.824/schedule.html

本次课程包括了分布式系统的引入内容和MapReduce, 前者是引入性质的内容就不过多介绍了, 这里介绍MapReduce

1 MapReduce是什么?

MapReduce是一种编程模型, 用于处理和大数据。其思想是使程序员能通过简单的Map函数和Reduce函数的编写就能完成分布式计算的任务, 而不需要知道任何有关分布式的事情,MapReduce框架会处理剩下的事情。

2 MapReduce结构

Alt text

上图所示是论文中对MapReduce架构描述, MapReduce中有如下术语:

  • Worker: 分布式系统中不同计算机上运行的进程
  • Master: 也是一个计算机上的进程, 负责协调整个处理过程,包括分配任务、监控进度和处理失败的工作节点
  • Task: 计算任务, 包括ReduceMap
  • Map: 一个用用户程序提供的函数, 用于将输入的key:value转化为一组mid-key:mid-value
  • Reduce: 一个用用户程序提供的函数, 用于将输入的mid-key:[]mid-value转化为输出output

通常, MasterMapReduce作为任务分配给Worker进行计算, 称为Map TaskReduce Task, 以下是其一次MapReduce任务(称为Job)执行的过程:

  1. 文件分片
    通常是在任务开始之前由Master完成的。这是初始化阶段的一部分
  2. Master分配Map Task
    Master将分片信息分配给Worker节点, 例如: 最开始将切割的文件名和文件内容作为key:value通过RPC提供给worker使其利用提供的map func进行计算, 这也是lab 1中的工作方式
  3. Map Task执行
    Map Task的计算过程除了利用map func进行计算外, 还需要将输出的多个mid-key:mid-value分割成片存储于不同的本地文件, 不同的分片将提供给不同的Reduce Task, 通常使用Hash函数并对取Reduce Task的数量模得到分片序号。执行Map TaskWorker在执行结束后报告Master某个Map Task的执行情况
  4. Master等待所有的Map Task执行成功
    Master根据WorkerMap Task的执行情况的报告进行决策, 保证所有的Map Task执行成功
  5. Master分配Reduce Task
    Master会给Worker分配某个Reduce TaskWorker根据其任务序号读取之前所有Map Task对应分片的内容,这也是为什么要等待所有的Map Task执行成功后才执行Reduce Task,这样才能保证Reduce Task不遗漏mid-key, 整合这分片文件后遍历所有的mid-key:[]mid-value并应用reduce func, 并存储输出结果。同样, 执行Reduce TaskWorker在执行结束后报告Master某个Reduce Task的执行情况
  6. Master协调所有的Reduce Task执行成功
    Master根据WorkerReduce Task的执行情况的报告进行决策, 保证所有的Reduce Task执行成功

最后, 不同的Job可以链式执行, 前一个Job的输出可以作为下一个Job的输入, 以此实现负责而庞大的计算任务

3 容错与恢复

  • 心跳信号
    Worker只需要向Master发送心跳信号表示自身的存活, 如果Master在预定时间内没有收到来自某个Worker的心跳,它就会将该Worker标记为失效,并将其上运行的所有MapReduce任务重新调度到其他节点上。不过这种设计不太会再lab 1中出现, 因为这样会使Master记录太多有关TaskWorker的信息, 设计相对复杂
  • 超时重试
    如果一个Worker节点在执行MapReduce任务耗时过长,Master会检测到这种情况。Master将其认定为失败, 可以将失败的任务重新分配给其他健康的Worker节点执行。这种重试机制可以处理机器故障、软件错误或其他导致任务失败的问题。
  • checkpoints
    Master会周期性地写入checkpoints到磁盘以预备可能的崩溃恢复
  • 原子重命名
    MapReduce任务的输出写入到一个命名好的临时文件,并且只在任务成功完成时才对其进行重命名,来实现任务的幂等性。
  • 文件系统备份
    MapReduce框架中,输入数据通常存储在一个分布式文件系统(如GFS)中,该文件系统会将数据块复制到多个节点上。这种数据副本机制确保了即使某些机器发生故障,数据仍然可用。

4 一个wc执行流程的案例

此处给出一个统计单词出现数量任务执行流程的案例, 助于理解

img

假设单词a的哈希值为0, b的哈希值为1