映射-归约(Map-Reduce)是谷歌多年前推出的建立海量数据索引的方法,有人说它是里程碑性的技术。而理解“映射-归约”,又是理解更时髦的 Hadoop 和 Spark 等大数据技术的基础。
其实,在谷歌之前,人们就不知不觉地用了映射-归约技术,如机场分发登机牌,银行取号排队,流水作业阅卷。本文将三次用到飞机航班相关的实例,在百度(或谷歌)查询栏中输入”CA1209”,不到一秒钟,百度给出 200 个结果,分成 20 多页呈现。
搜索网站服务器中有这样一个索引,类似于规范的科技书籍之书末索引,其特点是一关键字对多个标号(或页码),又称为倒排表。百度在回答查询时,一秒钟送出这些现成的 p1,p2,…..,p200。
设某搜索引擎每天新增 1 亿篇网文,每个网页平均有效关键字按 100 估算,要做完一天新增网页的倒排表,用笨方法,需要读扫描 1 亿网页,写处理 100 亿词汇。谷歌在创业之初,提出了一个从海量文档中做倒排索引的聪明方法--Map-Reduce(映射-归约),正是它,协调若干万台电脑,并行计算,完成了倒排表的构建与维护,使谷歌在求多求快的竞争中立于不败之地。
乘客在首都机场办理登机手续时,会经过三次映射(三次映射的复合还是映射)和一次归约。第一次映射,分而治之;第二次映射,把乘客分到值机台;第三次映射,把乘客映射到《航班,座号》;归约成为倒排表。
综上所述,办理登机牌的全过程可以表达为下列经典的 Map-Reduce 图,这个图大致反映了并行地映射-归约的流向,但未表达 4.3 节描述的归约细节,用于科普,勉强够了。
现在的互联网搜索引擎,倒排表中机理大致如上,但数量增大若干个数量级,相当于在上图中的乘客组有几千万,值机台(CPU)有 100 万,而航班(倒排索引项)是几万-几十万。需要说明,这只是为了说明‘映射-归约”机制而编的例子,真实的机场工作机制要复杂得多。