MapReduce是有google在一篇论文当中提出的的一个分布式计算模型,主要用于解决海量数据当中的计算问题。因为谷歌搜索当中存在海量的文本数据需要识别处理,因此自发明了MapReduce用于内部的文档索引处理系统。
MapReduce是如何进行大数据处理的?那是由于它的“分而治之”的设计思想,能够把复杂任务分解成小任务进行计算,通过实现map()和reduce()两个函数实现分布式计算。
mapper函数负责“分”,即是把一个总的任务拆分成N个“简单的小任务“来处理,这里简单的小任务指定是:
1、相对总任务计算规模相对变小、或者计算的数据量变小。
2、小任务分配到所需的数据节点上进行计算,小任务计算尽量在本机上计算。
3、这些小任务可以并行计算,互不相干扰和前后的依赖关系。
reduce函数主要的工作是对mapper函数小任务的计算结果进行汇总。至于如何汇总,可以根据业务需要进行组装后输出汇总数据。
比如举一个最简单的例子,谷歌服务器集群节点当中存在着全网所有网站的URL地址,我们要统计现在全网有多少个网站:
那么我就可以按服务器节点,分解成N个小任务,每个任务计算本机器节点上的URL地址数量。这就是“Map”。节点越多,我们统计URL速度就越快。
当所有节点统计完后,把所有节点的统计数据加在一起,这就是“Reduce”。
没错,MapReduce的核心设计思想就是这么简单,“分而治之”。