Google MapReduce读后感

写在前面

在课堂上听老师仔细的讲解了Google的云计算,并让我们课后研读Google的三篇重要论文,借着这次机会我想通过MapReduce这个伟大的编程模型以及一些相关资料来了解一下云计算。这部分我在读的时候有些生涩难懂,有很多知识连听都没有听说过,老师在课堂上给我们讲过Hadoop架构还有GFS集群以及云计算 ,这在文章中也有广泛提及。

论文摘要

  • MapReduce采用先分布后合成的方式首先创建一个map函数处理被拆分了的数据集合,再创建一个reduce函数合并所有的value值。只需关心如何分割输入数据,计算机集群的调度与错误处理还有管理集群中计算机的通信往来,MapReduce就能充分利用分布式系统的丰富资源,举个最简单的例子,比如用9台计算机要花上几天来计算的任务,99台计算机几分钟就能快速完成。而一个典型的MapReduce计算往往由上千台机器组成,处理TB级的数据。这个数字是相当惊人的。

MapReduce处理思路

一些用来处理大量数据的专用计算方法比如(文档抓取,web请求日志等)已经被实现,还有各种类型的衍生数据比如倒排索引、Web 文档的图结构的各种表示形势、每台主机上网络爬虫抓取的页面数量的汇总、每天被请求的最多的查询的集合等等。将这些计算分布在成百上千的主机上。看到这里我觉得很困惑,那么如何处理并行计算、如何分发数据、如何处理错误呢?
论文中给出的答案是我们可以设计一个抽象模型,只需表达简单运算即可,而不必关心复杂的并行计算,容错,数据分布等细节,这些问题都被封装在一个库里。
使用先拆分再合并的方法,结合map和reduce函数,就可以非常容易的实现大规模并行化计算。看到这我还是觉得很抽象,我不知道两个函数具体是怎么实现这么大规模的计算的。

编程模型及应用情况

  1. 模型简介
    下面简单的介绍一下我自己理解的MapReduce的基本思想:
    Map的过程主要包括初始化、Map操作执行和清理三个部分。Reduce和Map过程基本类似。我们将要执行的问题拆分成map和reduce操作。即先通过map程序将数据切分成不相关的区块,然后通过reduce程序将结果整理输出。map函数映射的规则由一个函数来指定,比如对{2,4}的映射变成了{4,8},reduce是对一组数据进行合并,而合并的规则由另一个函数来制定,就像对{2,3}进行求和结果是5,而求积结果是6。
    MapReduce 编程模型的原理是:利用一个输入 key/value pair 集合来产生一个输出的 key/value pair 集合。

  2. 处理阶段
    在MapReduce计算模型中,整个计算的过程为:首先遍历输入数据,将其解析成key/value对;然后将输入key/value对映射map组成另外一些key/value对;对数据进行合并迭代,将最终产生的key/value输出。

  3. 一些例子
    文章中提到了不少能用MapReduce模型解决的典型事件。下面我选择几个简要概述一下。

    计算 URL 访问频率:Map 函数处理日志中 web 页面请求的记录,然后输出(URL,1)。Reduce 函数把相同URL 的 value 值都累加起来,产生(URL,记录总数)结果。
    
    每个主机的检索词向量:检索词向量就是说用一个列表来概述出现在文档或文档集中的最重要的一些字或词组。Map 函数为每一个输入文档输出(主机名,检索词向量),其中主机名来自文档的 URL。Reduce 函数接收给定主机的所有文档的检索词向量,并把这些检索词向量加在一起,丢弃掉低频的检索词,输出一个最终的(主机名,检索词向量)。
    
    分布式排序:Map 函数从每个记录提取 key,输出(key,record)。Reduce 函数不改变任何的值。这个运算依赖分区机制和排序属性。
    

我在数学之美中看到Google因为MapReduce和PageRank算法大大提高了搜索引擎的用户体验感,之其中包括计算URL的访问频率还有检索词向量,都用到了MapReduce这个神奇的算法。

MapReduce系统

  • 执行步骤
  1. 将要执行的MPI程序复制到Hadoop框架中的master和每一台worker机器中。
  2. master选择有哪些worker机器来执行map程序与reduce程序。
  3. 分配所有的数据区块到执行map程序中的worker机器中进行map(切割成小块数据)。
  4. 将map后的结果存入worker机器。
  5. 执行reduce程序的worker机器,远程读取每一份map结果,进行配合,汇整与排序,同时执行redudce程序。
  6. 将结果输出给用户。
    以上是老师在课堂上给我们讲的Google云计算通过使用MapReduce算法的一些步骤,我觉得对于我们理解这篇有些晦涩难懂的论文也有帮助。MapReduce使用的是大量廉价的pc端,节点失效率也很高,所以必须采用容错机制,要有备份。以上是老师在课堂上给我们讲的Google云计算通过使用MapReduce算法的一些步骤,我觉得对于我们理解这篇有些晦涩难懂的论文也有帮助。MapReduce使用的是大量廉价的pc端,节点失效率也很高,所以必须采用容错机制,要有备份。

MapReduce点睛之笔—容错机制

我记得老师当时给我们讲MapReduce的容错性的时候说你永远不知道master什么时候会挂掉,所以这个库必须要能很好的处理机器故障。

  1. worker故障
    如果在一个约定的时间范围内没有收到worker的返回信息,master 将把这个 worker 标记为失效。这里让我想起了了老师在课堂上讲到的心脏包,老师当时举了个例子说微信判断我们是否断网的方式是每隔30秒或者一分钟向服务器发送一个消息,如果时间范围内得不到回应,服务器就判断这台手机断网了。这让我了解到IT行业许多知识都是通用的,数学之美也提到了这一点,有时候余弦定理甚至可以解决新闻分类排名的问题。
    我找了下资料这个叫做心跳检测,worker节点每隔一段时间(30s/1min)告诉master自己还活着,master如果长时间没有收到某个worker的消息,就断定该worker节点发生故障,这时该worker的任务就会被重置,然后重新指定给其他节点。如果是故障的是map worker节点,master节点还需告诉其他所有的reduce worker节点,该map worker节点发生变化。
  2. master故障
    如果这个 master 任务失效了,可以从最后一个检查点(checkpoint)开始启动另一个master 进程。,如果master节点故障了,就从最近的检查点开始工作(或启动备用master节点)。
  3. 备用任务
    如果有一台机器花了很长的时间才完成最后几个 Map 或 Reduce 任务,导致 MapReduce 操作超过了执行时间,master会调度备用(backup)任务进程来执行剩下的、处于处理中状态(in-progress)的任务。

大规模索引

论文中提到MapReduce 最成功的应用就是重写了 Google 网络搜索服务所使用到的 index 系统。索引系统的输入数据是网络爬虫抓取回来的海量的文档,这些文档数据都保存在 GFS 文件系统里。
看到这里我看见有点熟悉的GFS系统,我记得老师说这是一个可扩展的分布式文件系统,它针对大规模的数据处理,还能提供容错性。而且一个GFS集群由一个主服务器和大量的块服务器组成,并可以同时被被很多用户访问。

MapReduce技术展望

这篇论文详讲解了MapReduce的含义,实现以及应用,可是我看完论文之后还是有很多的专业知识不懂。上这门课的时候老师一直在强调视角很重要,就像我们身在学校我们的视野不能也只放在学校。知识的触角要不断延伸,因此我去找了些资料想了解下MapReduce技术的未来。
在采用MapReduce进行编程方面,一些国外机构对MapReduce编程模式进行了扩展和增强。有人在MapReduce步骤之后加上了merge步骤,从而形成一个新的框架。
有人将MapReduce的思想用在多核处理器上,在多核处理器的基础上提出了一条MapReduce的编程框架。
MapReduce模型在Google内部各个领域得到了广泛应用。它还被IBM,Amazon运用进一些主流方案中,他们推出的云计算服务大多是基于MapReduce实现的。

我的想法

我觉得在云大物移智十分火爆的今天 ,MapReduce模型作为一种高效的分布式计算模型,面对日益增加的大规模数据的计算任务,它将会发挥更重要的作用。学大数据首先要掌握的就是MapReduce算法,读完这本书我发现找到合适的算法模型还有学会抽象问题的能力十分重要,特别是之前读过数学之美,我的感受更加强烈了。
这篇论文重点强调了并行式计算还有容错性,并行式计算最初是为了满足需要大量计算的领域,比如天气预报,石油勘探以及人工智能研究等,现在它的研究内容不断拓宽,同时也重视新的计算模式比如神经计算,量子计算等。就如同数学之美告诉我们的那样,有时候毫无关联的两件事情可以用一个算法解决,但是怎么实现用什么方法实现,这就必须要依靠我们自己,有些大师学者终其一生都在寻找最简便精巧的算法,不得不说能够直接学到他们的思想和研究成果是一件很幸运的事情。
其实有时候真的挺迷茫的,这么多种语言,这么多算法,这么多大师的思想交汇,我不知道应该如何选择,还没有想好自己今后的方向。对于我来说现在最重要的是把基础打好,然后每天进步一点点,最好每天都有会新的收获,勿在浮沙筑高台。

参考资料

Google MapReduce中文版
MapReduce:新型的分布式并行计算编程模型
MapReduce技术的初步了解与学习

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值