MIT6.824 分布式系统 lab1

本文介绍了 MIT6.824 分布式系统课程的 Lab1,涉及 MapReduce 的概念、逻辑及其实现。作者通过炒菜的例子直观解释 MapReduce 的 Map、Partition & Map、Reduce 和 Merge 四个步骤,并分享了 Lab1 中分布式版本 MapReduce 的挑战和解决方案,包括理解测试用例、处理 worker 失败等情况。
摘要由CSDN通过智能技术生成

前言

之前做了MIT6.828操作系统课程,过程很痛苦,也学到了很多。不过最大的收货还是发现了非常好的学习方式——刷顶级名校的闻名课程。自然同样是麻省理工久负盛名的分布式系统课程MIT6.824就顺理成章的加入了todolist。值得议一提的是,这两门课程都是同一个实验室出品,实在是良心。

我的项目地址在:github.com/T0mmyliu/distributed-system-course-MIT6.824
课程网址在:https://pdos.csail.mit.edu/6.824/

MapReduce

MapReduce是谷歌的并行计算框架,据说是谷歌的工程师觉得每天处理分布式的代码,开锁解锁实在是又难又烦,而且有很多重复工作。就对并行的过程进行了抽象,就搞了这样一套简单易用的框架。

要想理解其中奥妙,当然是要阅读谷歌的那一篇顶顶有名的论文“MapReduce: Simplified Data Processing on Large Clusters”,这篇论文也在课程的schedule里面,值得一提的是,6.824的schedule里有很多assignment,其中不少是论文,能入选的都是经典中的经典,一定不能跳过,况且很多都和lab有很大的关系。

什么是MapReduce

虽然MapReduce是一个威力强大的工具,但是一般来说威力强大的工具最好也要简单好用,而把复杂封装在背后,才能称之为好工具。具体背后有多复杂,比如如何处理各类异常,我暂时不能领会。这里只介绍下这个工具如何简单好用!

lab1需要我们实现一个toy版本的MapReduce框架出来,虽然代码量比较少,但是难度也还是不小,下面先解释下这个mapreduce的逻辑。

直观解释

MapReduce的逻辑实在是非常的直观。简单的说就分为两步:Map 和 Reduce 。

用一个生活中的例子来举例说明:炒菜

假如你是一个酒店的行政总厨(Master),你不负责做菜,只负责指挥下面的厨师Worker。每天都进行着如下的步骤:

Register

每天都会有人去采购很多食材回来,有牛肉,猪肉,藕,土豆……..买回来这些食物后,需要将他们注册在一个本子上,这就是今天要处理的任务(task)了!

Partition and Map

做菜的第一个过程,当然是切菜,你是主厨(Master),你不负责做菜,只负责通知。”喂,过来把这个藕切成丁“,于是就有一个空闲的厨师过来切藕,你就把藕这个任务分发给了厨师(Worker)。切东西的过程,就是partition。之后可能还需要对食物做一些预先处理,比如抹上盐和料酒,这个过程就是mapfunc。

厨师切好藕后,根据一个规则”噢,藕是要炒肉的,放到第一个盆子里面去“,规则对于每一个厨师都是一样的,这样保证了,同一个input,处理(map)完后肯定都在一起。比如藕片肯定就都放在第一个盆里。一般来说如果有R个输出对象(盆子),一个简单的分配规则就是hash后MOD R。

Reduce

在介绍这个环节之前有一点要注意:和做菜一样,炒菜之前务必要保证菜已经切好了,这样才能不至于要炒回锅肉,发现只有肉片没有蒜苗。当确认前一个环节(map)确实结束后,开始炒菜(Reduce)。在这个环节里,你还是负责通知空闲的厨师,”喂你去炒一份回锅肉“。就有一个厨师接收到这个任务,开始准备炒肉。

”我需要煮熟的五花肉“说完从第一个盆子里拿了肉,”我还需要辣椒”,说完从第二个盆子里拿了辣椒。。。。“最后来一点蒜”从第R个盆子里拿了蒜。原料准备好了,就开始炒菜,这个过程就是reduce function,炒完了过后,统一输出到一个盘子里。这个环节一共要炒M盘菜(M个任务),那么就有了M盘菜了。

Merge

这个环节最好理解,在所有菜都做好了之后,统一端出去,给客人(

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MIT 6.824麻省理工学院的一门高级课程,全称为 "Distributed Systems"(分布式系统),它通常会在计算机科学和工程领域中教授。这门课程深入探讨了分布式计算环境中的核心概念和技术,包括: 1. **分布式计算模型**:学习如何设计和实现分布式系统,如客户端-服务器、对等网络、云计算等架构。 2. **通信协议**:理解像TCP/IP、HTTP、UDP等基础通信协议在分布式系统中的作用以及它们如何确保数据的可靠传输。 3. **一致性模型**:研究不同的一致性级别,如强一致性、最终一致性,以及如何在分布式环境中维护数据一致性。 4. **分布式算法**:涉及分布式任务调度、数据分片、共识算法(如 Paxos、 raft 等)等,这些算法对于分布式系统的高效运作至关重要。 5. **安全性与隐私**:讨论如何保护分布式系统免受恶意攻击,如身份验证、授权、加密等安全措施。 6. **容错与可靠性**:处理节点故障的恢复策略,以及冗余和备份技术的重要性。 7. **大规模分布式系统案例**:可能涵盖云计算平台的设计、大规模数据库系统、分布式文件系统(如Hadoop)或分布式计算框架(如Spark)。 如果你想深入了解这门课程,可以考虑查找相关的课程资料、观看讲座视频,或者阅读经典的分布式系统教材,如《分布式系统:概念与设计》( Distributed Systems: Concepts and Design)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值