- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
mapreduce
MapReduce
超大集群的简单数据处理
收件人:
发件人: 崮山路上走9遍
抄送:
日期: 2005-08-05
关于: MapReduce: Simplified Data Processing on Large Clusters
Jeffrey Dean Sanjay Ghemawat
jeff@ , sanjay@
Google , Inc.
摘要
MapReduce是一个编程模式,它是与处理/产生海量数据集的实现相关。用户指定一个map函数,通过这个map函数处理key/value(键/值)对,并且产生一系列的中间key/value对,并且使用reduce函数来合并所有的具有相同key值的中间键值对中的值部分。现实生活中的很多任务的实现都是基于这个模式的,正如本文稍后会讲述的那样。
使用这样的函数形式实现的程序可以自动分布到一个由普通机器组成的超大几群上并发执行。run-time系统会解决输入数据的分布细节,跨越机器集群的程序执行调度,处理机器的失效,并且管理机器之间的通讯请求。这样的模式允许程序员可以不需要有什么并发处理或者分布式系统的经验,就可以处理超大的分布式系统得资源。
我们的MapReduce系统的实现运行在一个由普通机器组成的大型集群上,并且有着很高的扩展性:一个典型的MapReduce计算处理通常分布到上千台机器上来处理上TB的数据。程序员会发现这样的系统很容易使用:已经开发出来了上百个MapReduce程序,并且每天在Google的集群上有上千个MapReduce job正在执行。
1 介绍
在过去的5年内,Google的创造者和其他人实现了上百个用于特别计算目的的程序来出来海量的原始数据,比如蠕虫文档,web请求log,等等,用于计算出不同的数据,比如降序索引,不同的图示展示的web文档,蠕虫采集的每个host的page数量摘要,给定日期内最常用的查询等等。绝大部分计算都是概念上很简洁的。不过,输入的数据通常是非常巨大的,并且为了能在合理时间内执行完毕,其上的计算必须分布到上百个或者上千个计算机上去执行。如何并发计算,如何分布数据,如何处理失败等等相关问题合并在一起就会导致原本简单的计算掩埋在为了解决这些问题而引入的很复杂的代码中。
因为这种复杂度,我们设计了一种新的东西来让我们能够方便处理这样的简单计算。这些简单计算原本很简单,但是由于考虑到并发处理细节,容错细节,以及数据分布细节,负载均衡等等细节问题,而导致代码非常复杂。所以我们抽象这些公共的细节到一个lib中。这种抽象是源自Lisp以及其他很多面向功能的语言的map和reduce概念。我们认识到大部分操作都和map操作相关,这些map操作都是运算在输入记录的每个逻辑”record”上,并且map操作为了产生一组中间的key/value键值对,并且接着在所有相同key的中间结果上执行reduce操作,这样就可以合并适当的数据。我们得函数模式是使用用户定义的map和reduce操作,这样可以让我们并发执行大规模的运算,并且使用重新执行的方式作为容错的优先机制。
MapReduce的主要贡献在于提供了一个简单强大的接口,通过这个接口,可以把大尺度的计算自动的并发和分布执行。使用这个接口,可以通过普通PC的巨大集群,来达到极高的性能。
第二节讲述了基本的编程模式,并且给出了一些例子。第三节讲述了一个面向我们基于集群的计算环境的MapReduce的实现。第四节讲述了一些我们建议的精巧编程模式。第五节讲述了在不同任务下我们的MapReduce实现的性能比较。第六节讲述了在Google中的MapReduce应用以及尝试重写了我们产品的索引系统。第七节讲述了相关工作和未来的工作。
2 编程模式
我们的运算处理一组输入的(input)键值对(key/valuepairs),并且产生一组输出的(output)键值对。MapReduce函数库德用户用两个函数来表达这样的计算:Map和Reduce。
Map函数,是用户自定义的的函数,处理输入的键值对,并且产生一组中间的(intermediate)键值对。MapReduce函数库稽核所有相同的中间键值键I的值,并且发送给Reduce函数进行处理。
Reduce函数同样也是用户提供的,它处理中间键值I,以及这个中间键值相关的值集合。这个函数合并这些值,最后形成一个相对较小的值集合。通常一个单次Reduce执行会产生0个或者1个输出值。提供给Reduce函数的中间值是通过一个iterator来提供的。这就让我们可以处理超过内存容量的值列表。
2.1 例子
我们考虑这样一个例子,在很大的文档集合中通机每一个单词出现的次数。我们写出类似如下的伪代码:
map(String key, String value)
文档评论(0)