我对MapReduce的理解

MapReduce:Simplified Data Processing on Large Clusters

摘要:这篇论文应该算是MapReduce的开山之作,总得来说这篇文章讲的内容比较简单,其实就是介绍了MapReduce的思想,虽然说这个思想简单,但是能够直接想到这个思想还是有点难度的。而且,简单的思想往往就会实现起来比较困难,MapReduce的目的是给用户提供一个简单的接口以便用户(包括没有并行编程经验的用户)使用,这样就会遇到很多困难(包括如何划分才负载均衡、处理之间怎么调度、有机器出错怎么处理等),所以说作者还是比较牛的,但是作者并未在文中对这些细节进行详细描述,都是大概说了一下思想,下面我就对这篇论文说下我的理解。

MapReduce的执行过程从名字可知,一个是Map,一个是Reduce。这其实是有点类似于归并排序,采用分而治之的思想。Map负责把大量的数据分配给不同的主机进行计算(一般通过hash方法),Reduce把不同的主机计算的中间结果进行整理输出。

对于使用作者说MapReduce的使用采用了函数式编程的思想,就是只要用户提供map和reduce这两个方法就好了,其余的都交给这个系统去处理。这里作者举了一个比较简单的例子,统计文档中某个单词出现的次数:


这里map函数对于输入的文档,将这个文档中每个单词出现的次数标记为1,并存储到中间的临时文件中;reduce函数将输入的每个单词从所有的中间文件中统计其出现的次数,最终输出。这样看来使用时非常简单的。

好了,简单的介绍完了,下面对论文中作者说他们在设计这个系统时考虑的一些问题,首先我们来看一下这个系统总体的运行流程是什么样的,看下图:


1.      MapReduce将用户输入的文件自动分成M份,然后将程序在集群的不同机器上拷贝好多份进行执行;

2.      在这些执行的机器中,有一台机器是作为Master来运行的,其余的叫做worker,Master负责给其它worker分配任务,一共需要分配M个map任务和R个Reduce任务;(PS:其实我看到这想到了MPI编程,这跟MPI其实类似,一般MPI是有一个接收主机,这台机器负责将其他的机器的计算结果返回,当然MPI也可以不设定接收主机);

3.      Worker机器进行Map计算,并将中间结果存储在buffer中;

4.      同时,缓存的结果被写入硬盘,然后同时分配方法分到R个区域中(R的个数由用户指定),然后将这些中间结果的“位置”传递给Master,Master负责将其转发到reduce worker(确实类似MPI,进行消息传递);

5.      当reduce work收到消息后,它使用远程进程读取map缓存的数据,当reduce进程读完之后将这些数据通过中间的关键字进行排序以便所有具有相同关键字的数据被放到一起,如果数据过大则使用外排;

6.      Reduce对于每一个中间结果的关键字,访问所有排序过的中间数据,然后将key和一致的中间的values传递给用户定义的Reduce;

7.      当所有的map和reduce任务都完成了之后,master唤醒用户程序。

当所有的都执行完毕之后,最后会有R份输出结果。一般情况下不需要合并这R份结果,因为很可能会用这些结果继续进行MapReduce的操作,或者将其传给另外的分布式系统继续处理。

在上述的框架下,需要处理几个问题:

1.      master的数据结构:

maste存储了每个map和reduce任务的状态,中间文件的存储位置等。

2.      容错性

Work主机失败:

Master每个一段时间会pingwork,如果收不到回复,就认为work down掉了。Completed map任务会被重新执行如果work发生错误,因为中间的结果存储在了本地的磁盘上,但是reduce work发生了错误则不需要重新执行已经执行过的任务,因为reduce的结果存储在全局的文件系统上。

Master主机失败

Master每隔一段时间会创建一个checkpoint,如果出错则从checkpoint重新开始就行了。

3.      位置

利用GFS文件系统,解决数据传输对网络的挑战。

4.      任务粒度

M和R要远远大于worker主机的数量。通过使每个主机运行不同的任务提高了负载均衡。

5.      备份

并不会等到所有的map或者reduce进行完的时候才进行下一步,有时候会遇到某一个主机速度很慢的情况(比如低速硬盘),这时可以在mapreduce操作将要完成的时候就进行下一步的操作,这样可以大大的提高效率。 

基本上,MapReduce就是这样的,这篇文章作者还介绍了系统中的分块(partition),保证顺序(ordering guarantee),合并(combiner)等的方法,我觉得这个思想真的是非常好,或许我们不使用mapreduce但是我们可能会处理一个有很多条记录的数据,这样我们就可以使用mapreduce的思想进行处理了。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值