文档章节

MIT 6.824 Spring 2015

tantexian
 tantexian
发布于 2016/08/19 10:32
字数 746
阅读 161
收藏 0

这学期选了《分布式系统导论》,实验部分和MIT 6.824 Spring 2015 一样,请戳, 再加上对我来说很困难的课前reading以及课后作业,压力巨大:(

实验共分5部分,根据助教往年评分来看,难度呈线性递增。 

由于MIT提供的代码是由go语言所写,所以在着手实验前,你需要了解一下go,我用的是 AN INTRODUCTION TO PROGRAMMING IN GO 链接, 很薄的小册子, 可以迅速了解go语言的基本语法。

6.824 Lab 1: MapReduce

实验要求, Part 1 需要完成一个完整Word Count程序中的map函数和reduce函数, 第一步当然是读提供的代码, 把mapreduce.go中RunSingle()流程读懂,知道map函数和reduce函数的输入和输出是什么, Part 1 基本就会做了。

下图是我画的RunSingle()简单流程图,以nMap=3,nReduce=2为例,输入一个文本文件,最后输出Word Count结果。 
(注意其中Reduce()阶段的蓝线和黑线的不同,这是Word Count中我非常喜欢的一个trick) 

示例

原来mapreduce也不是很神秘呢. 当然, 这里只是基于单机单线程顺序执行的Word Count。

Part II: Distributing MapReduce jobs

这部分用单机多线程模拟分布式mapreduce,主要是完成mapreduce/master.go中RunMaster()函数。 这部分需要用到goroutine和channel, 这也是go语言的强大之处,有了goroutine和channel,多线程的门槛不再高不可攀(起码对我来说 ~), 
Word Count流程同Part 1:Split、Map、Reduce、Merge, 只不过此时的Map和Reduce阶段需要RunMaster()来分配给各个Worker来做,至于怎样分配Job、fault tolerance,便是我们需要考虑的问题了。我的思路主要受到Modify the MapReduce struct to keep track of any additional state (e.g., the set of available workers) 这句话的启发,于是我便在struct MapReduce中构造了一个availableworkers,用来记录某时刻那些处于空闲的Worker, 于是乎,对于每一个Job(mapjob或者reducejob),Master要么把它分配给availableworkers中处于空闲状态的Worker,要么分配给mr.registerChannel中新注册的Worker。

至于Part 3, 我在测试Part 2 代码时,发现Part 3 部分也通过了测试。冏。。。




总结, 虽然Part 2、3 代码通过了测试,其中还是有一个关键的地方必须改进,对于一个job, Master在决策分配给availableworker or registerChannel时,注意其中availableworker是map[string] *WorkerInfo类型,而registerChannel是channel类型,这。。。为了解决这个问题,我只好加了时间锁 =.= 一直觉得这个方法太不优美了。。。待我啃啃go语法,看看有没有什么好的方法吧。

注:Collaboration Policy中明确提到Please do not publish your code or make it available to future 6.824 students – for example, please do not make your code visible on github. so,我就不share code了。

 

PS:网友实现demo:https://github.com/ldaochen/yfs2012

官方地址:http://nil.csail.mit.edu/6.824/2015/general.html

本文转载自:http://studygolang.com/articles/2780

tantexian
粉丝 225
博文 527
码字总数 746616
作品 0
成都
架构师
私信 提问
记录下spring-boot microservice

方案 spring-boot-microservices golang Tyk API Gateway app mac下没build成功 spring boot blog-microservices 有空跑下示例 quickstart Up and running with Sample Spring-Cloud based a......

youngjdong
2015/10/29
425
0
Spring Boot入门开发之明月千城(一)

最近数据分析的项目也即将告一段落了,中间也积累了很多知识,特此记录一下。其中用的最爽的Web组合开发就是Intellij IDEA + Maven + Spring Boot + Velocity + Boostrap + jQuery了,关于后...

九劫散仙
2015/04/24
8.3K
0
jdbc无法连接linux上的mysql数据库

在linux虚拟机上安装一个mysql,在linux中可以启动,也可以用mysql,命令连接,在远程的window服务器使用navicate也可以连接,就是使用jdbc连接出错,(jdbc连接window上的mysql是可以的),而...

写点儿
2015/08/28
2.4K
1
springMVC+Mybatis整合 Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

在按照视频做孙宇老师springmvc和mybatis整合视频的例子,一直提示注入失败,不是很明白为什么注入失败,直接贴代码 希望大神帮忙, 报错: 2015-9-17 10:00:09 org.apache.tomcat.util.dige...

BabyMason
2015/09/17
21K
7
SpringBootUnity 2017.2 发布

项目说明 需求是多变的,本项目是以spring boot为基础,在使用spring boot的过程中对应不同的需求选用不同的技术和spring boot进行搭配,因此本项目是个偏于使用示例的定位。同时如果您在使用...

烛影清风
2017/11/02
2.5K
2

没有更多内容

加载失败,请刷新页面

加载更多

75、GridFS

GridFS是MongoDB提供的用于持久化存储文件的模块,CMS使用Mongo DB存储数据,使用FGridFS可以快速集成开发。 工作原理: 在GridFS存储文件是将文件分块存储,文件会按照256KB的大小分割成多个...

lianbang_W
55分钟前
4
0
js bind 绑定this指向

本文转载于:专业的前端网站➱js bind 绑定this指向 1、示例代码 <!DOCTYPE html><html lang="zh"> <head> <meta charset="UTF-8" /> <title>bind函数绑定this指向......

前端老手
57分钟前
4
0
CentOS Linux 7上将ISO映像文件写成可启动U盘

如今,电脑基本上都支持U盘启动,所以,可以将ISO文件写到U盘上,用来启动并安装操作系统。 我想将一个CentOS Linux 7的ISO映像文件写到U盘上,在CentOS Linux 7操作系统上,执行如下命令: ...

大别阿郎
今天
4
0
深入vue-公司分享ppt

组件注册 全局注册 注册组件,传入一个扩展过的构造器 Vue.component('my-component', Vue.extend({/*...*/})) 注册组件,传入一个选项对象(自动调用Vue.extend) Vue.component('my-comp...

莫西摩西
今天
4
0
gitlab重置管理员密码

登录gitlab服务器 [root@localhost bin]# sudo gitlab-rails console productionLoading production environment (Rails 5.2.3)irb(main):001:0> u = User.where(email: 'admin@example.co......

King华仔o0
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部