【MIT 6.5840/6.824】Lab1 MapReduce

6.5840/6.824 Lab汇总
本文对应的Lab版本为MIT6.5840-Spring2024的Lab1
本博客只提供思路,不会公开任何代码

本lab耗时约6h,码量约500行

MapReduce思想

MapReduce的思想属于是比较简单的,分为两个阶段:
Map阶段将用户指定的输入文件(通常存放于分布式文件系统中,不过本Lab使用本地文件系统来代替),利用用户编写的map函数,将输入文件拆分为(key,value)形式,输出到若干个中间文件中(这些中间文件存放在map函数所运行的机器中,假设后面运行reduce函数的worker有nReduce个,那么每个运行map函数的worker,就需要把拆分出来的kv对分为nReduce个中间文件来存放,可在key上做hash来划分kv对到对应的中间文件中)
Reduce阶段将中间文件读取出来,并按照key进行排序,然后调用用户提供的reduce函数,将相同key的所有value进行聚合,最后输出到文件中。假设存在nReduce个reduce任务,那么最后会产生nReduce个输出文件。
MapReduce框架中,存在一个coordinator(论文里也叫master),用于协调map任务与reduce任务,同时,需要考虑任务crash的问题(重启任务)。

实现思路

代码主要分为两部分:coordinator.go和worker.go
coordinator主要用于回应worker的rpc请求,分为两种请求(分配任务与任务反馈)。coordinator需要维护每一个任务的状态(可使用map),当收到分配任务的请求时,它找出一个未完成的任务并分配给worker(也是通过rpc),指定该任务的类型,并传输所需参数;当收到worker的任务反馈时,判断任务是否成功,并更新任务状态。
同时,coordinator需要监控worker,如果一个worker超过10s还没有回复,那么认为该worker已经crash了,需要重新分配这个worker所运行的任务。
worker则是打工人,需要不断询问coordinator是否有任务做,对于map任务与reduce任务,进行不同的逻辑处理,按照MapReduce框架的思想进行实现就可以了。

感受

第一次使用go,2小时就可以速成,变量声明与赋值都很方便(像python),但它是类型安全的编译型语言,不会产生运行时的类型错误,写起来非常方便。同时,不像C++一样需要内存管理,因为存在gc机制。
当然,目前看到的只是冰山一角,还需要继续深入学习思考。

相关推荐

  1. MIT 6.5840/6.824】Lab1 MapReduce

    2024-07-09 17:50:05       21 阅读
  2. 6.824-Lab 1: MapReduce

    2024-07-09 17:50:05       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-09 17:50:05       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-09 17:50:05       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-09 17:50:05       58 阅读
  4. Python语言-面向对象

    2024-07-09 17:50:05       69 阅读

热门阅读

  1. 【云原生】Kubernetes之持久化

    2024-07-09 17:50:05       21 阅读
  2. urlib Python爬虫

    2024-07-09 17:50:05       28 阅读
  3. 【MySQL】SQL中的DROP、DELETE和TRUNCATE的区别

    2024-07-09 17:50:05       37 阅读
  4. 云原生监控-Kubernetes-Promethues-Grafana

    2024-07-09 17:50:05       30 阅读
  5. arm (exti中断)

    2024-07-09 17:50:05       29 阅读
  6. LRU Cache 双向链表以及STL list实现----面试常考

    2024-07-09 17:50:05       31 阅读
  7. gitlab每日备份以及restore

    2024-07-09 17:50:05       29 阅读
  8. Centos安装Node.js

    2024-07-09 17:50:05       45 阅读
  9. C#多线程并行计算实例

    2024-07-09 17:50:05       19 阅读
  10. C#架构师的成长之路

    2024-07-09 17:50:05       29 阅读