谷歌的爬虫和日志数据增长到任何一台服务器都无法单独存储或处理的程度,自然的解决方案是购买更大型昂贵的服务器,或者编写没人愿意写的定制并行程序。

迪恩和戈马瓦特在2003年2月首次编写的这个库,让程序员只需提供两个函数;运行时负责拆分输入、分发任务、按键排序,并重试任何失败的部分。

到2004年底,谷歌已在多达数万台机器上运行数百个不同的MapReduce程序,应用于谷歌新闻、Zeitgeist以及大型图处理和机器学习任务。

该论文发表于OSDI 2004,后来又在《ACM通讯》上刊出,成为大数据处理的模板,并被开源Hadoop重新实现,使该模式成为行业默认。

将计算迁移到数据,并分解为映射和归约两步

将任务分解为映射和归约,让普通工程师无需编写线程或消息传递即可实现并行化。

将数据保留在其计算所在的机器上,避免在网络中传输海量数据。

重试失败的映射任务,使一台不可靠的PC集群表现得像一台可靠的大型机。

当数据量远超单台机器时,将任务分解为易于并行的片段,并让调度器隐藏硬件故障,而不是购买更大更贵的机器。

MapReduce成为谷歌标准的批处理模型,并通过Hadoop推动了整个行业的大数据时代。随着交互式SQL取代两步批处理模型,谷歌后来推出了更高层次的系统(如FlumeJava、Dataflow),MapReduce本身逐渐被取代,但其核心思想——一个大型任务可以简化为两个函数——已经成为永恒。

从这里,追溯依据

参考来源

  1. MapReduce: Simplified Data Processing on Large Clusters (OSDI 2004) USENIX · usenix.org
  2. Sorting the World: Google Invents New Way to Manage Data Wired · wired.com ·