Wednesday, June 23, 2021

MapReduce paper: Chinese translation

 摘  要

Mapreduce 是一个能够处理和产生大量数据的级联系统和编程模型。用户编制的map函数处理一个key/value对,并产生一系列的中间key/value对,reduce函数汇聚所有具有相同key的中间value值。很多现实的任务就是用这种方式解决的,这也是本文所要展示的。 

以这种模型编写的程序,于普通机器构成的大型集群系统中协调执行。分时系统负责输入数据的分割,安排这些程序平衡执行于这些设备,协调处理失误,和负责必需的中间设备的通信。这就允许程序员在没有任何并行和分布式系统经验的情况下轻松地利用大型的分布式系统。 

我们MapReduce成果运行于由普通机器构建的大系统中,并且正快速扩展:一个典型的MapReduce计算系统在数以千计的设备系统上处理数T的数据。程序员发现这系统很容易处理:百计的MapReduce程序系统已经实现,并且每天就有有一千个以上MapReduce任务在Google的分布式系统上执行。 

1 概述

在过去的五年,作者和很多其他的Google公司同事完成了百计的处理大量数据,具有特殊目的的计算,如爬行文本,web的访问日志,等等,计算统计各种结论数据,例如反向索引,web文档的各种图形结构表现,每个主机网络爬虫文档数量汇总,每天被请求数量最多查询的集合,等等。通常这些计算不复杂,然而输入数据量巨大,要想在能够接受的合理时间内完成,只有将计算分布运行于成百上千的设备上。如何进行并行计算,如何分发数据,如何处理错误?因需要大量代码解决这些问题使得原本简单的计算变得复杂。

为了解决上述复杂的问题,我们设计一个新的抽象模型,使用这个抽象模型,我们只要表述我们想要执行的简单运算即可,而不必关心并行计算、容错、数据分布、负载均衡等复杂的细节,这些问题都被封装在了一个库里面。设计这个抽象模型的灵感来自Lisp和许多其他函数式语言的Map和Reduce的原语。我们意识到大多数的运算都包含这样的操作:在输入数据的“逻辑”记录上应用Map操作得出一个中间key/value 对集合,然后在所有具有相同key值的value值上应用Reduce操作,从而达到合并中间的数据,得到一个想要的结果的目的。使用MapReduce模型,再结合用户实现的Map和Reduce函数,我们就可以非常容易的实现大规模并行化计算;通过MapReduce模型自带的“再次执行”功能,也提供了初级的容灾实现方案。
这个工作(实现一个MapReduce框架模型)的主要贡献是通过简单的接口来实现自动的并行化和大规模的分布式计算,通过使用MapReduce模型接口实现在大量普通的PC机上高性能计算。
第二部分描述基本的编程模型和一些使用案例。第三部分描述了一个经过裁剪的、适合我们的基于集群的计算环境的MapReduce实现。第四部分描述我们认为在MapReduce编程模型中一些实用的技巧。第五部分对于各种不同的任务,测量我们MapReduce实现的性能。第六部分揭示了在Google内部如何使用MapReduce作为基础重写我们的索引系统产品,包括其它一些使用MapReduce的经验。第七部分讨论相关的和未来的工作。

No comments:

Post a Comment