MapReduce:大规模集群上的简化数据处理.docVIP

MapReduce:大规模集群上的简化数据处理.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
MapReduce: 大规模集群上的简化数据处理 【摘要】 ?? ? ?MapReduce是一个“与处理以及生成大量数据集相关联的”程序模型。?用户通过定义一个map函数,处理键值对以生成一个中间键值对的集合,?以及一个叫做reduce的函数用以合并所有先前map过后的有相同键的中间量。现实世界中的许多任务在这个模型中得到了很好的表达,如下文所述。 ?? ? ?程序员用这种风格的程序写出的代码可以自动并行以及在商用极其上大规模的处理数据。运行时系统关注输入数据的分区,通过一系列机器的集合来规划程序的执行, 处理程序失效以及把控必要的系统内部交互。这个框架的优势在于使得程序员无需任何并行与分布式系统的经验就可以容易的掌控大型分布式系统的资源。 ?? ?我们的MapReduce的实现是运行在商用机器的大规模集群之上,且拥有高可扩展性:一个典型的MapReduce运行场景是在数千台机器上处理TB级数据。程序与系统易于使用:数百个MapReduce程序实施了数千份的MapReduce的每天都运行于谷歌集群之上job。 1.说明 ?? ?在过去的五年里, 作者以及其它许多谷歌人开发出了大量的用于特定目的的处理大规模原始数据的程序,诸如网页请求日志等等计算不同类型的派生数据,这些派生数据有网络文件的迥异的图形结构,每个主机的页面数,某一天所提出的最高频率问题等等。大多数这种计算在概念上是想当容易把握的。然而,输入的数据通常是大规模的且计算不得不分布在数百甚至上千太的机器以在一个合理的时间内得出计算结果。 有关如何并行计算,分布数据,处理失效则大大增加了原初直观问题的难度。这就需要复杂的大量的代码来处理这些问题。 ?? ?作为对复杂性的反应,我们设计了一个全新的抽象模型允许表达简洁的且为我们所需要的计算,同时该抽象模型屏蔽了大量底层并行细节,容错处理, 数据分布,负载平衡(将这些设计细节放置于库中)。我们的抽象模型的map 和 reduce最初灵感是来自于lisp这样的诸多函数式编程语言。我们认识到绝大多数的计算关涉到“之于每一输入逻辑记录用于操作下一步的临时键值对的map操作”,这些计算的下一步就是运用reduce操作操作所有共享同一个键的变量,以恰当的合并分布数据。我们使用用户定义的map和reduce函数模型,这一点使得我们得以对大规模计算并行化,同时重新执行重要的容错处理机制.该抽象模型的主要工作是形成了一个简单而强有力的接口,该接口允许并行自动化以及使得分布在通用PC之上的大尺度集群计算成为可能. ?? ?第二部分描述了基础的编程模型并给出了数个例子。第三部分描述了合适我们集群计算环境的MapReduce接口实现。第四部分给出了数个精巧的我们认为有用的程序模型。第五部分是各种不同任务下的性能测试。第六部分探索了运用MapReduce重写谷歌产品检索系统的情况。第七部分给出相关的讨论以及未来的工作。 2.程序模型 ?? ? ?计算任务是这样描述的:有一个键值对的集合作为输入,以及另外一个键值对的集合作为输出。MapReduce 库的使用者将计算抽象表达为两种功能:Map和Reduce.Map由用户书写, 将键值对的一个集合作为输入,同时产出一个作为中间状态的键值对。MapReduce库将所有拥有相同的键( 键I)的中间状态键合并起来传递到Reduce功能。Reduce功能同样是由用户书写的,它接收一个中间键( 键I)以及有关这个键的键值集合,将这些值进行归并 merge以形成可能的更小的值集合。典型的场景是每一个Reduce操作所唤起的只是0个或者1个最终输出值(键值)。中间值是由用户的reduce功能使用的迭代器来支持的。这就允许我们对相对于内存来说过大的值队列进行处理。 2.1例子 ?? ?考虑这样一个问题:以一大堆文档为单位查找某个词语出现的词频。用户可能象下面一样书写伪代码: map(String key, String value): // key: document name // value: document contents for each word w in value: EmitIntermediate(w, 1); reduce(String key, Iterator values): // key: a word // values: a list of counts int result = 0; for each v in values: result += ParseInt(v); Emit(AsString(result)); map功能就产出单词,并对其出现的次数统计。伪代码中的EmitIntermediate(w, 1)指的是出现1次,这里是特例。Reduce功能统计每一个特定单词的出现次数

文档评论(0)

docindoc + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档