本来读Google MapReduce是老师布置的任务,但是第一我是那种要么就不做事要么就要把事做好的人,第二我本来就有意向向大数据方向发展所以好好的看了一下论文,发现我现在的水平还是不行,感觉论文读起来晦涩难懂很多地方不清楚。而我也查了许多资料来去了解MapReduce,发现其实MapReduce的底层原理其实并不是很复杂,接下来我就谈一谈论文里的要点和我的一些看法和感想。

论文要点

介绍

第一段介绍说了为什么要开发这个编程模型,在作者开发模型前Google的程序员每天要处理海量的数据,如文章的抓取,web请求日志,还有计算处理各种类型的衍生数据,如倒排索引,web文档的图结构的各种表示形势、每台主机上网络爬虫抓取的页面数量的汇总、每天被请求的最多的查询的集合等等。而这些数据处理其实并不困难在概念上,但是由于数据量太过于庞大而导致这样的简单问题的数据处理也变得很困难,并且只能将数据分布在成百上千的主机上完成.

而为了解决上述的问题,作者计划设计一个新的抽象模型,使用这个抽象模型可以抽象出并行计算、容错、数据分布、负载均衡等复杂问题,而使使用者只需要关心想要执行的简单运算(计算机领域的抽象思维起了大作用)。

编程模型

MapReduce对于使用者就像一个数据通道,数据从这边进去在比较短的时间内(如果你的计算机数量足够多的话)在另一端会出来已经处理过的数据了。而实现原理我就不细讲了(细讲我也讲不清楚)大体是用户把数据传入然后MapReduce库先把文件划分为很多份然后再产生一个key/value pair的集合,随后将集合传递给reduce函数而用户自定义的reduce函数数调用只产生 0 或 1 个输出 value 值。通常我们通过一个迭代器把中间 value 值提供给 Reduce 函数,这样我们就可以处理无法全部放入内存中的大量的 value 值的集合。

以下为转载的v_JULY_v的文章MapReduce技术的初步了解与学习

举例说明

  相信几乎没有人喜欢看一堆只写概念的文章。本文将通过实例来充分解释清楚MapReduce这个模型。

  先从最最简单的例子说起吧。假设我们有一组数据:1,2,3,…,100。求这一组数据的平方和。现在我们用MapReduce这个模型解决这一个问题。

  首先我们把这组数据分成100份,交由100台处理器去处理。每一台处理器只做一件事,就是把自己要处理的数据平方一下。这样一来,最初的那组数[1,2,3,…,100]就被映射成了[1,4,9,16,…,10000]了。这就是所谓的Map操作。而Reduce操作呢?Reduce操作就是把映射后得到的这100个新的数据累加咯,这不就得到结果了吗?

  这个例子太简单了吧,不过它的确说明了MapReduce的本质思想:先把要处理的数据分成n多个小块,然后交由n多个处理器处理,最后再通过一定的手段进行数据汇总,得出答案。

  换个例子吧。这次这个例子是几乎所有讲MapReduce的文章都会讲到的一个例子:单词计数。假设有3篇文章,分别为:

Paper1: We study algorithm.

Paper2: We share our thinking.

Paper3: This team shares thinking of algorithm.

根据MapReduce的模型,将这3篇文章交由3台处理器单独处理:

Map操作:

处理之后对中间结果进行一定处理:(注意:此步骤仍然是用多台处理器分别完成)

最后进行汇总,即Reduce操作:

这样,3篇文章的所有词频不就处理完了吗?还是很简单吧。

实现

MapReduce的实现

  1. 用户程序首先调用的 MapReduce 库将输入文件分成 M 个数据片度,每个数据片段的大小一般从16MB 到 64MB(可以通过可选的参数来控制每个数据片段的大小)。然后用户程序在机群中创建大量的程序副本。
  2. 这些程序副本中的有一个特殊的程序–master。副本中其它的程序都是 worker 程序,由 master 分配任务。有 M 个 Map 任务和 R 个 Reduce 任务将被分配,master 将一个 Map 任务或 Reduce 任务分配给一个空闲的 worker。
  3. 被分配了 map 任务的 worker 程序读取相关的输入数据片段,从输入的数据片段中解析出 key/valuepair,然后把 key/value pair 传递给用户自定义的 Map 函数,由 Map 函数生成并输出的中间 key/valuepair,并缓存在内存中。
  4. 缓存中的 key/value pair 通过分区函数分成 R 个区域,之后周期性的写入到本地磁盘上。缓存的key/value pair 在本地磁盘上的存储位置将被回传给 master,由 master 负责把这些存储位置再传送给Reduce worker。
  5. 当 Reduce worker 程序接收到 master 程序发来的数据存储位置信息后,使用 RPC 从 Map worker 所在主机的磁盘上读取这些缓存数据。当 Reduce worker 读取了所有的中间数据后,通过对 key 进行排序后使得具有相同 key 值的数据聚合在一起。由于许多不同的 key 值会映射到相同的 Reduce 任务上,因此必须进行排序。如果中间数据太大无法在内存中完成排序,那么就要在外部进行排序。
  6. Reduce worker 程序遍历排序后的中间数据,对于每一个唯一的中间 key 值,Reduce worker 程序将这个 key 值和它相关的中间 value 值的集合传递给用户自定义的 Reduce 函数。Reduce 函数的输出被追加到所属分区的输出文件。
  7. 当所有的 Map 和 Reduce 任务都完成之后,master 唤醒用户程序。在这个时候,在用户程序里的对MapReduce 调用才返回。

MapReduce的容错

master会周期性的ping每个worker,如果在一个周期中没有收到worker的消息就标记为失效,并把他的任务分配给其他的worker。而对于master失效的方法MapReduce没有太好的解决方法,作者是周期性的将信息写入磁盘,如果失效了就让用户重新启动MapReduce。

MapReduce的存储位置

由于使用的机器是普通的计算机所以网络带宽是很缺乏的,MapReduce为了能处理这个问题使用了两办法,第一是每份要处理的数据被分的比较小只有64MB传输比较方便,并且MapReduce 的 master 在调度 Map 任务时会考虑输入文件的位置信息,尽量将一个 Map 任务调度在包含相关输入数据拷贝的机器上执行。这样大部分的数据都会从本地的机器读取,因此消耗非常少的网络带宽。

MapReduce的备用任务

有一句谚语说的好“一只木桶能盛多少水,并不取决于最长的那块木板,而是取决于最短的那块木板。也可称为短板效应。”而MapReduce也面临这这样的问题,影响一个 MapReduce 的总执行时间最通常的因素是“落伍者”:在运算过程中,如果有一台机器花了很长的时间才完成最后几个 Map 或 Reduce 任务,导致 MapReduce 操作总的执行时间超过预期。而MapReduce使用一个在任务即将完成时启动备用的任务进程来执行剩下的,处于处理中的任务,而对于这些有多个进程的任务只要有一个完成了都会被标记为完成。

MapReduce的技巧

对于MapReduce的技巧我在这里就不多赘述了有兴趣的可以去看Google的论文

MapReduce的性能

对于数据的分析我不是行家,甚至连入门都没有再加上Google的论文的分析已经够详细了所以我在这里就不多赘述了,我在这里只想谈一点。就是在关闭了备用任务排序程序后程序的执行情况是在960秒之后只有5个Reduce任务没有完成但是这五个任务又执行了300秒才完成,导致整个计算消耗了1283秒,多了44%的执行时间。这是很可怕的因为五个任务而浪费掉了300秒的时间,所以说备用任务的设置是很有必要的。

MapReduce的经验

介绍了MapReduce的应用,现在MapReduce已经应用到了

  1. 大规模机器学习问题
  2. Google Newe和Froogle产品的集群问题
  3. 从公众查询产品(比如 Google 的 Zeitgeist)的报告中抽取数据。
  4. 从大量的新应用和新产品的网页中提取有用信息(比如,从大量的位置搜索网页中抽取地理位置信息)。
  5. 大规模的图形计算。
  6. 大规模的索引

MapReduce的相关工作

在相关工作中作者给出了MapReduce在实现的过程中的技术是收到了那些技术的启发,以及在应用时对原技术进行了那些改进,或者是与原技术有什么不同。

感想

首先在读这篇论文之前我看过许多资料我推荐一篇资料给大家参考文章是fumin发表在csdn上的谷歌技术"三宝"之MapReduce链接其中提到了谷歌的GFS技术和BigTable技术,这两个技术我也就不多讲了,你只需要知道MapReduce技术是来配合这两个技术的。而这三个技术的开源实现就是Hadoop,而MapReduce技术是如何来配合其他的两个技术的呢?其实GFS和BigTable已经为我们提供了高性能、高并发的服务,但是并行编程可不是所有程序员都玩得转的活儿,如果我们的应用本身不能并发,那GFS、BigTable也都是没有意义的。MapReduce的伟大之处就在于让不熟悉并行编程的程序员也能充分发挥分布式系统的威力。而我觉得MapReduce的实现就是我们计算机领域对问题的抽象,对复杂问题的拆分的这种思想的体现。比如说我在数学之美里看到的Google大脑就是一种大规模的并行处理的人工神经网络,这里恰好和我们的MapReduce的思想很符合,并行处理一看就知道很符合,其实还有人工神经网络也是的,对神经网络有了解的人应该知道神经网络的原理其实很简单就是一种很特殊的有向图,而这种有向图就是对复杂问题的拆分的思想。其实看待我们现在社会的趋势就是信息化,大数据化,数据已经成为了一种新的资源并且这个资源要大量的才有意义,未来的社会是一个算力缺乏的时代不光是人工智能,自动驾驶和终端的去计算化还是海量的大数据的处理,还有随着科学技术的发展,许多科研工作者越来越清楚地认识到“计算”已经成为与理论分析和实验并列的第三种科学研究手段,许多科研工作已无法离开高性能计算机的支持,这些都导致了计算资源的不足。并且由于量子隧穿效应摩尔定律已经快要失效了,而能大幅度提高算力的方法如量子计算,生物计算还都离实际应用很远,所以未来我们计算机领域可能会是软件方面使用更好的算法更好的技术去进一步的简化问题压缩解决问题所需要的算力或是开发如Hadoop这样的并行计算处理工具,而硬件方面应该是积极的去寻找能提高CPU性能的方法。而并行计算可能就是在未来一段时间在算力没有大的提升的唯一的解决方法,而且我们计算机领域最新的技术发展基本上和大数据有关而大数据的处理又依赖于云计算的并行计算,所以我们学科的未来一段时间的发展重点就应该是并行计算技术的优化和进步。

参考资料

  1. Google MapReduce中文版
  2. fumin的谷歌技术"三宝"之MapReduce
  3. 王鹏的《并行计算应用及实践》

读Google MapReduce后有感相关推荐

  1. 看新闻新疆列车被吹翻后有感.

    读下面新闻后有感! 倘若乘客们不用棉被,大衣去堵车窗,而是把另一边的车窗打开,让风吹过车体,那么列车就有可能不会侧翻了. 事故现场 事故现场 事故现场 救援人员正紧张工作 对于乘客刘宇亮来说,28日2 ...

  2. 读Google三篇论文有感

    读Google三篇论文有感 在这一个星期内,我认真读了谷歌的三篇重要论文,下面是我的读后感.这三篇论文分别是Google FS.MapReduce.Bigtable.Google没有公布这三个产品的源 ...

  3. 新生 语不惊人死不休 —— 《无限恐怖》读后有感

    开篇声明,我博客中"小心情"这一系列,全都是日记啊随笔啊什么乱七八糟的.如果一不小心点进来了,不妨直接关掉.我自己曾经写过一段时间的日记,常常翻看,毫无疑问我的文笔是很差的,而且心 ...

  4. DayDayUp:2019.12.30吴晓波2020年终秀演讲《预见2020:来海边,拾起信心》读后有感

    DayDayUp:2019.12.30吴晓波2020年终秀演讲<预见2020:来海边,拾起信心>读后有感 导读:2019年,过的好不好?有人豪情万丈,有人强颜欢笑. 互联网平台带来了方便快 ...

  5. 大道至简 读后有感

    大道至简   读后有感 今天的读后感是在读完第二章之后写的,这一章的标题乍一看很有意思,题为是懒人造就了方法,其实细细一品,很是有道理.这章也分为四节,分别是"是懒人造就了方法", ...

  6. 读后有感 - UI设计师必知:线框图、原型和视觉稿

    读后有感 - UI设计师必知:线框图.原型和视觉稿 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作 ...

  7. 读后有感 - 残忍但诚实的忠告:您没钱,就不要掺和这事了

    读后有感 - 残忍但诚实的忠告:您没钱,就不要掺和这事了 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致" ...

  8. 读《揭秘家用路由器0day漏洞挖掘技术》 后有感:第一道防线的重要性

    读<揭秘家用路由器0day漏洞挖掘技术> 后有感:第一道防线的重要性 一.路由器漏洞的分类 笼统的回答一下这个漏洞问题:厄运饼干漏洞 .UPnP协议漏洞.NAT-PMP协议漏洞.32764 ...

  9. Google MapReduce中文版

    英文原文链接: Google Map Reduce 译文原文链接: Google MapReduce中文版 Google MapReduce中文版 译者: alex 摘要 MapReduce是一个编程 ...

  10. Google MapReduce架构设计

    前情回顾 Google MapReduce到底解决什么问题? Google MapReduce是Google产出的一个编程模型,同时Google也给出架构实现,它能够解决"能用分治法解决的问 ...

最新文章

  1. ZLComboBox自定义控件开发详解
  2. 如何在PHP里面连接数据库?
  3. bootstrapValidator对于隐藏域验证和程序赋值即时验证的问题
  4. Hbuilder连接安卓模拟器,调试app
  5. 全栈工程师的3个关键技能是什么?
  6. 嵌入式IOEServer终于开发完成,相应的问题作一个系统阐述(WINCE)
  7. 安卓和php开发融云聊天室,聊天室
  8. 关于蓝天准系统换京东方屏后不显bios的解决方案
  9. 在计算机系统中 cpu指什么地方,在计算机中cpu指的是什么
  10. impala:Negotiation complete: Invalid argument: Client connection negotiation failed: client connect
  11. C语言 求5分2分1分硬币
  12. 基于锁的并发数据结构
  13. 中信路由器关闭虚拟服务器,非常简单的中兴路由器重置方法
  14. js简易版歌单播放,可切换下一首
  15. 计算机排版打字操作,五笔字型与计算机排版培训教程2版 第9章 打字与排版的首选—Word 2007.ppt...
  16. GitHub爆款项目,去马赛克软件Depix使用
  17. 探索 Flutter 模拟事件触发 | 开发者说·DTalk
  18. 计算机视觉编程——基本的图像操作和处理
  19. 解决webpack打包、编译、热更新Node内存不足问题
  20. FPGA 24 工程模块 红外遥控(NEC协议)解码

热门文章

  1. Word章节自动编号+公式编号
  2. 全球与中国服装测试、检验及认证市场深度研究分析报告
  3. html让方块往下移动,JS控制方块自动移动
  4. 从写作到演讲,虾米君不断尝试的 2021|年终回顾
  5. wii模拟器linux版,Dolphin模拟器_Dolphin模拟器最新版下载[Wii模拟器]-下载之家
  6. GhostXP_SP3雨林木风纯净版Y7.0(09年12月更新版) 【雪豹】
  7. 小米路由器r2d_小米路由器R2D固件(路由器刷机更新工具)V2.24.11 免费版
  8. 怎么克隆计算机的mac,MAC地址克隆方法
  9. 2021-2027全球及中国运动营养和体重管理食品行业研究及十四五规划分析报告
  10. PS使用高反差保留增加图像锐度