Google-MapReduce中文版_1.0.pdf
文本预览下载声明
Google MapReduce 中文版1.0 版
Google MapReduce 中文版1
摘要
MapReduce 是一个编程模型,也是一个处理和生成超大数据集的算法模型的相关实现。用户首先创建一
个Map 函数处理一个基于key/value pair 的数据集合,输出中间的基于key/value pair 的数据集合;然后再创建
一个Reduce 函数用来合并所有的具有相同中间key 值的中间value 值。现实世界中有很多满足上述处理模型
的例子,本论文将详细描述这个模型。
MapReduce 架构的程序能够在大量的普通配置的计算机上实现并行化处理。这个系统在运行时只关心:
如何分割输入数据,在大量计算机组成的集群上的调度,集群中计算机的错误处理,管理集群中计算机之间
必要的通信。采用MapReduce 架构可以使那些没有并行计算和分布式处理系统开发经验的程序员有效利用分
布式系统的丰富资源。
我们的MapReduce 实现运行在规模可以灵活调整的由普通机器组成的集群上:一个典型的 MapReduce
计算往往由几千台机器组成、处理以 TB 计算的数据。程序员发现这个系统非常好用:已经实现了数以百计
的MapReduce 程序,在Google 的集群上,每天都有1000 多个MapReduce 程序在执行。
1 介绍
在过去的5 年里,包括本文作者在内的Google 的很多程序员,为了处理海量的原始数据,已经实现了数
以百计的、专用的计算方法。这些计算方法用来处理大量的原始数据,比如,文档抓取(类似网络爬虫的程
序)、Web 请求日志等等;也为了计算处理各种类型的衍生数据,比如倒排索引、Web 文档的图结构的各种表
示形势、每台主机上网络爬虫抓取的页面数量的汇总、每天被请求的最多的查询的集合等等。大多数这样的
数据处理运算在概念上很容易理解。然而由于输入的数据量巨大,因此要想在可接受的时间内完成运算,只
有将这些计算分布在成百上千的主机上。如何处理并行计算、如何分发数据、如何处理错误?所有这些问题
综合在一起,需要大量的代码处理,因此也使得原本简单的运算变得难以处理。
为了解决上述复杂的问题,我们设计一个新的抽象模型,使用这个抽象模型,我们只要表述我们想要执
行的简单运算即可,而不必关心并行计算、容错、数据分布、负载均衡等复杂的细节,这些问题都被封装在
了一个库里面。设计这个抽象模型的灵感来自Lisp 和许多其他函数式语言的Map 和Reduce 的原语。我们意
识到我们大多数的运算都包含这样的操作:在输入数据的“逻辑”记录上应用Map 操作得出一个中间key/value
pair 集合,然后在所有具有相同key 值的value 值上应用Reduce 操作,从而达到合并中间的数据,得到一个
1 译者alex,原文地址/
作者/编著者:阎伟 邮件: andy.yanwei@163.com 博客: 微博:/2152410864 1/24
Google MapReduce 中文版1.0 版
想要的结果的目的。使用MapReduce 模型,再结合用户实现的Map 和Reduce 函数,我们就可以非常容易的
实现大规模并行化计算;通过 MapReduce 模型自带的“再次执行”(re-execution )功能,也提供了初级的容
灾实现方案。
这个工作(实现一个 MapReduce 框架模型) 的主要贡献是通过简单的接口来实现自动的并行化和大规模
的分布式计算,通过使用MapReduce 模型接口实现在大量普通的PC 机上高性能计算。
第二部分描述基本的编程模型和一些使用案例。
第三部分描述了一个经过裁剪的、适合我们的基于集群的计算环境的MapReduce 实现。
第四部分描述我们认为在MapReduce 编程模型中一些实用的技巧。
第五部分对于各种不同的任务,测量我们MapReduce 实现的性能。
第六部分揭示了在 Google 内部如何使用MapReduce 作为基础重写我们的索引系统产品,包括其它一些
使用MapReduce 的经验。
第七部分讨论相关的和未来的工作。
2 编程模型
MapReduce 编程模型的原理是:利
显示全部