Jeffrey Dean 和 Sanjay Ghemawat 来自 Google, Inc.,他们的文章《MapReduce: Simplified Data Processing on Large Clusters》发表在 2004 年的 OSDI(Operating Systems Design and Implementation)会议上。这项研究介绍了一种名为 MapReduce 的编程模型及其实现,用于在大型集群上处理和生成海量数据集。
随着互联网的快速发展,处理海量数据变得尤为重要。尤其是在 Google,分析网页爬取日志、生成反向索引、统计热门搜索词汇等任务中,需要处理数十亿级别的数据记录。这些任务通常需要跨越数千台计算机并行处理。然而,这种大规模计算环境下,开发者需要面对诸多挑战,包括:
为了简化这一复杂过程,作者设计了一种灵感来源于 Lisp 等函数式语言的抽象模型——MapReduce。这一模型将核心计算任务抽象为 Map 和 Reduce 两种操作,极大地降低了开发者实现分布式计算的门槛。
本研究旨在提供一种简单、强大的接口,帮助开发者轻松实现大规模数据处理任务,同时自动完成任务并行化、故障容错、负载均衡以及数据局部化优化。
示例任务: - 词频统计:Map 函数解析每个文档并记录单词出现次数,Reduce 函数汇总所有单词的计数。
运行 MapReduce 的主要步骤包括: 1. 数据分片:输入文件被切分为多个分片(每片通常 16MB 到 64MB)。 2. 任务分配:一个主节点将 Map 和 Reduce 任务分配给集群中的工作节点。 3. Map 阶段:每个工作节点处理分配的输入分片,生成中间键值对。 4. 中间数据分区:中间结果根据键值通过哈希函数划分为不同的分区。 5. Reduce 阶段:每个 Reduce 任务读取相关分区的数据,按照键值排序后运行 Reduce 函数。 6. 结果输出:将最终结果写入分布式文件系统。
Map 和 Reduce 两个函数,其余并行化和容错机制均由系统负责。Jeffrey Dean 和 Sanjay Ghemawat 的 MapReduce 模型通过简化分布式计算的编程模型和实现,解决了海量数据处理的核心挑战。它的提出不仅提高了 Google 内部的计算效率,更对后续大数据技术的发展产生了深远影响。