MIT 6.824 Lab1 mapreduce

2023-11-08 07:58
文章标签 mit mapreduce 6.824 lab1

本文主要是介绍MIT 6.824 Lab1 mapreduce,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这学期选了分布式计算这门课。

不得不说真的是一门有料的课程。所有的东西讲的都是MIT 6.824上的,Lab也是一样。

不过干货太多带来的也就是,需要花费比较多的时间去看资料和写代码。

但是我喜欢这种感觉。


课程网址是    http://nil.csail.mit.edu/6.824/2016/schedule.html

Lab1 是mapreduce的一个实验

花了我大概一天多的时间,主要是有时不太了解go语言的特性,以及没有很好的理解lab的意思。

不过确实Lab1主页上描述的不多,很多东西mapreduce那篇论文讲的也并没有那么细致,有时就需要看代码去猜测了

还好代码基本流程都差不多能看明白。


 

首先最蛋疼的地方在于Go语言的一些特性

最烦的地方就是unused variable 会报错, import的包没使用也报错,这就使得改代码需要更细致,更麻烦, 

而代码中又有无数个地方需要返回异常,这就搞的超级麻烦,而且这样debug也费劲...

然后go还有channel,goroutine这些东西,都是需要了解掌握的。

很多时间都花费在了解go语言,括怎么读写文件我都纠结了好久,不过在Lab1里的意图是让用json格式来读写文件的,

这里注释里有例子,使用json.NewEncoder和json.NewDecoder, 会一行一条记录的写json或者读json。刚开始我没仔细看,

就用了各种奇怪的方式写文件,最后发现都不符合要求还特别麻烦,在这里浪费了巨多时间...

然后实验有5个步骤。刚开始是串行的,后面都是并行的。


逻辑一定要清晰,不然会很蛋疼。

需要注意的是:

1)每个map任务对一个文件操作,产生nReduce个文件。 nMap个任务会产生 nMap * nReduce个文件。这些文件的名称会有专门的函数来指定

2)采用ihash函数进行hash的目的是为了让同一个word永远分给指定序号的reducer,这样好并行。

3)每个reduce任务会操作nMap个文件,把所有分给自己的word进行汇总,输出到一个文件。 nReduce个任务产生nReduce个文件,这些文件的名称也会有专门的函数来指定

4) 所有reduce任务完成了,系统会使用merge将nReduce个文件合并。这个merge函数已经写好了,不能乱改。

5)   可以观察到reduceF中的value参数是string数组, 而key value对都是string,也就是doReduce的时候,实际上会把某个key的所有value append到一个数组里,

一般而言这些value都是"1", 最后数组长度就是词的频次。 这里要灵活使用map... ,比方说string映射成了一个string数组。

6) 考虑多机的时候,可以看到master结构体里的channel变量,有一个专门用来存放空闲的机器名称。于是我们可以使用goroutine和channel配合来完成调度。

假设我们现在分发doMap任务,显然我们发完一个任务不能在那等任务完成再发下一个,所以对每个doMap任务,开一个goroutine,去获取空闲的worker,

让woker干活,干活完再让他回到空闲队列,而我们的主线程,就只需要等所有人干完活就可以了。这里会有一些使用channel的技巧。


暂时想了这么多,这些点都是我走过弯路的地方,主要也是有时候没好好看要求,胡写瞎写,加上不熟悉go语言导致的

代码就不贴了,仔细想想还是挺有意思的, 一看代码就没想象空间了,实验做完会觉得其实真的很简单...。



这篇关于MIT 6.824 Lab1 mapreduce的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/368673

相关文章

【Hadoop|MapReduce篇】MapReduce概述

1. MapReduce定义 MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架。 MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上。 2. MapReduce优缺点 2.1 优点 MapReduce易于编程 它简单的实现一些接口,就可以完成一个分布式

MapReduce算法 – 反转排序(Order Inversion)

译者注:在刚开始翻译的时候,我将Order Inversion按照字面意思翻译成“反序”或者“倒序”,但是翻译完整篇文章之后,我感觉到,将Order Inversion翻译成反序模式是不恰当的,根据本文的内容,很显然,Inversion并非是将顺序倒排的意思,而是如同Spring的IOC一样,表明的是一种控制权的反转。Spring将对象的实例化责任从业务代码反转给了框架,而在本文的模式中,在map

圆形缓冲区-MapReduce中的

这篇文章来自一个读者在面试过程中的一个问题,Hadoop在shuffle过程中使用了一个数据结构-环形缓冲区。 环形队列是在实际编程极为有用的数据结构,它是一个首尾相连的FIFO的数据结构,采用数组的线性空间,数据组织简单。能很快知道队列是否满为空。能以很快速度的来存取数据。 因为有简单高效的原因,甚至在硬件都实现了环形队列。 环形队列广泛用于网络数据收发,和不同程序间数据交换(比如内核与应用

【硬刚Hadoop】HADOOP MAPREDUCE(11):Join应用

本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Hadoop部分补充。 1 Reduce Join Map端的主要工作:为来自不同表或文件的key/value对,打标签以区别不同来源的记录。然后用连接字段作为key,其余部分和新加的标志作为value,最后进行输出。 Reduce端的主要工作:在Reduce端以连接字段作为key的分组已经完成,我们只需要在

【硬刚Hadoop】HADOOP MAPREDUCE(10):OutputFormat数据输出

本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Hadoop部分补充。 1 OutputFormat接口实现类 2 自定义OutputFormat 3 自定义OutputFormat案例实操 1.需求 过滤输入的log日志,包含atguigu的网站输出到e:/atguigu.log,不包含atguigu的网站输出到e:/o

【硬刚Hadoop】HADOOP MAPREDUCE(9):MapReduce内核源码解析(2)ReduceTask工作机制

本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Hadoop部分补充。 1.ReduceTask工作机制 ReduceTask工作机制,如图4-19所示。 图4-19 ReduceTask工作机制 (1)Copy阶段:ReduceTask从各个MapTask上远程拷贝一片数据,并针对某一片数据,如果其大小超过一定阈值,则写到磁盘上,否则直接放到内存中

【硬刚Hadoop】HADOOP MAPREDUCE(8):MapReduce内核源码解析(1)MapTask工作机制

本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Hadoop部分补充。 MapTask工作机制 MapTask工作机制如图4-12所示。 图4-12  MapTask工作机制 (1)Read阶段:MapTask通过用户编写的RecordReader,从输入InputSplit中解析出一个个key/value。 (2)Map阶段:该节点主要是将解析出

【硬刚Hadoop】HADOOP MAPREDUCE(7):Shuffle机制(3)

本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Hadoop部分补充。 7 Combiner合并 (6)自定义Combiner实现步骤 (a)自定义一个Combiner继承Reducer,重写Reduce方法 public class WordcountCombiner extends Reducer<Text, IntWritable, Text,

【硬刚Hadoop】HADOOP MAPREDUCE(6):Shuffle机制(2)

本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Hadoop部分补充。 4 WritableComparable排序 1.排序的分类 2.自定义排序WritableComparable (1)原理分析 bean对象做为key传输,需要实现WritableComp

【硬刚Hadoop】HADOOP MAPREDUCE(5):Shuffle机制(1)

本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Hadoop部分补充。 1 Shuffle机制 Map方法之后,Reduce方法之前的数据处理过程称之为Shuffle。如图4-14所示。 2 Partition分区