MIT6.824食用过程
MIT6.824食用过程
Lab1 MapReduce
一、介绍
本实验使用Go语言构建一个mapreduce库,以及一个容错的分布式系统。第一部分完成一个简单的mapreduce程序,第二部分写一个提交到mapreduce workers 的master 并且要能够处理workers 的错误。 库的接口和容错的方法跟mapreduce paper里面描述的类似。
二、环境搭建 vscode&&go
1. 安装golang
2. 安装git
3.安装cntlm
代理工具,用来给git 和 go 配置代理,下载文件。
git config --global http.proxy http:china\\username:password@proxy:8080
git config --global https.proxy https:china\\username:password@proxy:8080
测试: $ git clone https://github.com/dotcloud/docker.git 如果报错ssl certificate。。。
执行 $ git config --global http.sslVerify false
再执行git clone即可
4. 在vscode 里面下载go插件
三、实验说明
map/reduce实现支持两种操作模式:顺序执行、分布式执行。前者是指一次执行一个task,当所有的map task
执行完才轮到reduce task
程序源码在mapreduce 目录下
通过调用master.go来启动job,可以设置顺序执行和分布式执行
程序执行流程如下:
- 输入包括:输入文件,map函数,reduce函数,reduce task的数量
- 启动rpc server(master_rpc.go) 然后等待workers 注册 (master.go -> register)
- schedule.go -> schedule()决定如何分配任务给workers 以及如何处理失败
3.1 第一部分 编写map/reduce 的输入和输出
$ cd src/mapreduce
$ go test -run Sequential
$ go test -v -run Sequential // debug mode (将common.go里面的debugEnabled改为true)
修改src/mapreduce 下的common_map.go 中的doMap() 函数和 common_reduce.go 中的doReduce() 函数
其中doMap() 函数实现:
- 读取inputfile,根据reduce task 的个数(nReduce) 生成相应个数的中间文件
- 命名格式为 mrtmp.[jobName]-[mapTasknum]-[reduceTasknum] 比如 mrtmp.test-0-0
duReduce()函数功能:
- 读取doMap() 生成的中间文件
- 并且将nMap个文件进行合并 排序 并且输出
- 输出文件名为 mrtmp.[jobName]-res-[reduceTasknum] 比如: mrtmp.test-res-0
3.2 第二部分 实现MapFunc 和 ReduceFunc
实现src/main/wc.go 中的MapF() 和 ReduceF()
其中MapF(inputfile string, contents string) 功能:
inputfile 是输入的文件名 不用考虑
contents 为 inputfile 的内容,调用 strings.FieldsFunc 来完成分词功能
代码如下:
words := strings.FieldsFunc(contents, func(c rune) bool {
return !unicode.IsLetter(c)
})
var result = make([]mapreduce.KeyValue, 0)
for _, w := range words {
kv := mapreduce.KeyValue{w, "1"}
result = append(result, kv)
}
示例
func main() {
f := func(c rune) bool {
return !unicode.IsLetter(c) && !unicode.IsNumber(c)
}
fmt.Printf("Fields are: %q", strings(" foo1;bar2,baz3...", f))
}
ReduceF(key string, values []string)功能:
key 代表每一个键的内容
values 是key对应的 values列表
实现:需要统计value的总数
count := strconv.Itoa(len(values))
return count
3.3 分布式mapreduce任务
schedule() 函数通过读取registerChan 来获取workers集合
MIT6.824食用过程的更多相关文章
- Mit6.824 Lab1-MapReduce
前言 Mit6.824 是我在学习一些分布式系统方面的知识的时候偶然看到的,然后就开始尝试跟课.不得不说,国外的课程难度是真的大,一周的时间居然要学一门 Go 语言,然后还要读论文,进而做MapRed ...
- MIT-6.824 MapReduce
概述 MapReduce是由JeffreyDean提出的一种处理大数据的编程模型,用户定义map和reduce函数,map函数处理原始数据生成一系列键值对中间数据,reduce函数并合相同key的键值 ...
- 【MIT-6.824】Lab 1: MapReduce
Lab 1链接:https://pdos.csail.mit.edu/6.824/labs/lab-1.html Part I: Map/Reduce input and output Part I需 ...
- MIT-6.824 Raft协议
摘要 raft是一种比paxos容易理解的一致性算法,实现起来比paxos简单许多.本文前部分描述算法的细节,后部分尝试探讨下该算法的原理. 算法描述 raft算法之所以简单的原因之一是它将问题分解成 ...
- MIT-6.824 操作系统 汇总
MIT-6.828-JOS-环境搭建 ELF文件格式 lab1:C, Assembly, Tools, and Bootstrapping lab2:Memory management lab3:Us ...
- MIT6.824 分布式系统实验
LAB1 mapreduce mapreduce中包含了两个角色,coordinator和worker,其中,前者掌管任务的分发和回收,后者执行任务.mapreduce分为两个阶段,map阶段和red ...
- MIT-6.824 Lab 3: Fault-tolerant Key/Value Service
概述 lab2中实现了raft协议,本lab将在raft之上实现一个可容错的k/v存储服务,第一部分是实现一个不带日志压缩的版本,第二部分是实现日志压缩.时间原因我只完成了第一部分. 设计思路 如上图 ...
- MIT 6.824 : Spring 2015 lab1 训练笔记
源代码参见我的github: https://github.com/YaoZengzeng/MIT-6.824 Part I: Word count MapReduce操作实际上就是将一个输入文件拆分 ...
- MIT 6.824 : Spring 2015 lab3 训练笔记
摘要: 源代码参见我的github:https://github.com/YaoZengzeng/MIT-6.824 Lab3: Paxos-based Key/Value Service Intro ...
随机推荐
- linux设置定时任务的方法步骤
一,首先登录 二,找到文件夹 三,查看定时任务 crontab -l 四,vi root 编辑定时任务 编辑完成后,点ESC,然后:wq 时间格式 分钟 小时 日期 月份 周 命令 数字范围 0-59 ...
- Python2和Python3共存问题
前提条件:先准备一个新电脑 1.下载Python2和Python3的安装包,直接官网下载:https://www.python.org/download 2.配置环境变量,可以手动配置,也可以安装的时 ...
- zabbix—自动发现端口并监控
自动批量检查agent开放的端口 PS:如果服务器上的应用都是固定的,不会随机产生的都可以使用自动发现端口来监控: 如果服务器会随机出现端口且每次启动程序都会改变,可以采用第二种方法,来监控指定的端 ...
- JMS与消息队列
JMS,Java Message Service,即Java消息服务. MOM,Message Oriented Miiddleware的英文缩写,指的是利用高效可靠的消息传递机制进行平台无关的数据交 ...
- android: Android水波纹点击效果
Android API 21及以上新增了ripple标签用来实现水波纹的效果.我们可以通过设置ripple背景来实现一些View点击效果. 该水波纹效果有两种:一种是有界的(点击后类似于一个矩形向四周 ...
- java的List中使用filter过滤出符合特定条件的元素List
在实际开发中,经常需要把一个列表中的元素,按照特定条件过滤出来,放到一个新的列表中.本文给出了几个例子,来描述解决这个问题的方法. 我们假设有一个书的List,需要找出其中id分别是3.6.8.9的书 ...
- Python3基础 函数 多值参数 元组与字典形式(键值对分别指出)
Python : 3.7.3 OS : Ubuntu 18.04.2 LTS IDE : pycharm-community-2019.1.3 ...
- pytorch Containers的Module部分
参考:https://pytorch.org/docs/stable/nn.html Containers Module CLASS torch.nn.Module 所有神经网络模块的基类 你定义的模 ...
- linux下nacos的1.1.3版本集群部署
windows单机版参见0.9.0.RELEASE版本的spring cloud alibaba nacos实例 ,linux集群版我们还是用上次下载的nacos压缩包,通过rz -y上传到wlf用户 ...
- ES6深入浅出-10 ES6新增的数据类型-2.Set与数组去重
一种新的数据类型,它是对象的一种,Set,很像数组,又不是数组. Set 类型 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Refe ...