2019-04-17 蔡元楠
我有幸几次与来 Google 参观的同行进行交流,当谈起数据处理技术时,他们总是试图打探 MapReduce 方面的经验。
这一点让我颇感惊讶,因为在硅谷,早已没有人去谈论 MapReduce 了。
今天,我们就来聊聊为什么 MapReduce 会被硅谷一线公司淘汰。
我们先来沿着时间线看一下超大规模数据处理的重要技术以及它们产生的年代。
我认为可以把超大规模数据处理的技术发展分为三个阶段:石器时代,青铜时代,蒸汽机时代。
石器时代
我用“石器时代”来比喻 MapReduce 诞生之前的时期。
数据的大规模处理问题早已存在。早在 2003 年的时候,Google 就已经面对大于 600 亿的搜索量
。
但是数据的大规模处理技术还处在彷徨阶段。当时每个公司或者个人可能都有自己的一套工具处理数据。却没有提炼抽象出一个系统的方法。
青铜时代
2003 年,MapReduce 的诞生标志了超大规模数据处理的第一次革命,而开创这段青铜时代的就是下面这篇论文《MapReduce: Simplified Data Processing on Large Clusters》。
杰夫(Jeff Dean)和桑杰(Sanjay Ghemawat)从纷繁复杂的业务逻辑中,为我们抽象出了 Map 和 Reduce 这样足够通用的编程模型
。后面的 Hadoop 仅仅是对于 GFS、BigTable、MapReduce 的依葫芦画瓢,我这里不再赘述。
蒸汽机时代
到了 2014 年左右,Google 内部已经几乎没人写新的 MapReduce 了
。
2016 年开始,Google 在新员工的培训中把 MapReduce 替换成了内部称为 FlumeJava(不要和 Apache Flume 混淆,是两个技术)的数据处理技术
。
这标志着青铜时代的终结,同时也标志着蒸汽机时代的开始。
我跳过“铁器时代”之类的描述,是因为只有工业革命的概念才能解释从 MapReduce 进化到 FlumeJava 的划时代意义
。
Google 内部的 FlumeJava 和它后来的开源版本 Apache Beam
所引进的统一的编程模式,将在后面的章节中为你深入解析。
为什么 MapReduce 会被取代
现在你可能有一个疑问 :为什么 MapReduce 会被取代?今天我将重点为你解答。
高昂的维护成本
使用 MapReduce,你需要严格地遵循分步的 Map 和 Reduce 步骤。当你构造更为复杂的处理架构时,往往需要协调多个 Map 和多个 Reduce 任务
。
然而,每一步的 MapReduce 都有可能出错
。
为了这些异常处理,很多人开始设计自己的协调系统(orchestration)。例如,做一个状态机(state machine)协调多个 MapReduce,这大大增加了整个系统的复杂度。
如果你搜 “MapReduce orchestration” 这样的关键词,就会发现有很多书,整整一本都在写怎样协调 MapReduce。
你可能会惊讶于 MapReduce 的复杂度
。我也经常会看到一些把 MapReduce 说得过度简单的误导性文章。
例如,“把海量的××数据通过 MapReduce 导入大数据系统学习,就能产生××人工智能”。似乎写文的“专家”动动嘴就能点石成金。而现实的 MapReduce 系统的复杂度是超过了“伪专家”的认知范围的。下面我来举个例子,告诉你 MapReduce 有多复杂。
想象一下这个情景,你的公司要预测美团的股价,其中一个重要特征是活跃在街头的美团外卖电动车数量,而你负责处理所有美团外卖电动车的图片。
在真实的商用环境下,为了解决这个问题,你可能至少需要 10 个 MapReduce 任务:
首先,我们需要搜集每日的外卖电动车图片。
数据的搜集往往不全部是公司独自完成,许多公司会选择部分外包或者众包。所以在数据搜集(Data collection)部分&