这篇文档属于类型a,我将根据要求撰写详细的学术报告。
本文由 Jeffrey Dean 和 Sanjay Ghemawat 两位作者完成,并由 Google 公司支持。文章的通讯地址为 jeff@google.com 和 sanjay@google.com。这篇研究成果发表在 OSDI ’04: 6th Symposium on Operating Systems Design and Implementation。文中详细介绍了 MapReduce 的编程模型及其在 Google 内部的实际应用及影响。
研究领域:分布式计算与大规模数据处理。
在互联网规模不断扩大的背景下,处理和生成大规模数据集(例如爬取的文档、网页请求日志等)已成为关键需求。然而,由于数据集的体量巨大,与之配套的计算需要分布在数百甚至数千台机器上运行。因此,如何高效地并行化计算、分发数据以及处理故障成为一个复杂的问题。而这些问题的复杂性使得程序员在实现这些分布式计算模型时需要处理繁琐的低层代码,掩盖了核心逻辑的简单性。
本研究在此背景下提出了一种面向分布式系统的新抽象,即基于 MapReduce 编程模型的简化计算框架。这个框架灵感来源于函数式编程中 LISP 的 map 和 reduce 原语,提供了一种表达计算逻辑的新方式,同时隐藏了并行化、容错、数据分发以及负载均衡的复杂细节。研究旨在通过这一抽象使得没有分布式系统经验的程序员也能轻松利用大规模集群资源。
MapReduce 的编程模型
MapReduce 由两个用户定义的函数组成:map 函数和 reduce 函数。
map 函数将输入的键值对进行处理,生成一组中间键值对。reduce 函数接收相同中间键对应的所有值,并将其合并输出为一个或多个最终值。工作流流程(图解如 Figure 1 所示)
工作流包括以下几步:
master)负责调度任务,将 map 和 reduce 任务分配给集群中的多个工作节点(workers)。map 函数生成中间键值对,并将其缓存于内存。hash(key) mod r)划分。reduce 函数生成最终输出的文件。实现细节
MapReduce 的实现针对 Google 内部使用的大规模集群优化,这些集群由数百到上千台通过以太网连接的廉价 PC 组成,具备以下特性:
系统容错机制 系统通过重新执行任务应对以下故障:
优化与增强
MapReduce 提供了多项优化与扩展功能,包括:
案例分析
MapReduce 被用于多个计算场景:
性能测试
性能测试分别针对分布式正则表达式搜索(grep)和分布式排序(sort)进行。
容错能力
测试显示,系统即使在多个工作节点故障的情况下(例如模拟杀死 200 个节点),也能通过重新执行未完成任务将延迟控制在 5%以内。
扩展应用
MapReduce 被广泛应用于 Google 内部,例如:
本研究提出了一种简化的编程模型,彻底改变了分布式计算的方式。MapReduce 的价值体现在以下几个方面:
作者提到,未来可能将进一步优化 MapReduce 的性能,实现更好的动态资源分配和支持更复杂的任务模型。同时,MapReduce 的普遍适用性使得其可拓展为更加广泛的计算框架。
MapReduce 是大规模分布式计算领域的一项重要进步,为互联网时代的海量数据处理提供了高效、可靠和可扩展的解决方案。