先举个小小的例子,简单说明一下Mapreduce这个架构。
小明网购买了一大箱苹果,她现在要把这箱苹果带回家,可是搬不动,于是她召集了一群自己的小伙伴,将箱子给拆开,给每个小伙伴分了一袋,然后一起带回家,再将这些苹果放到这个箱子,这样的话这一箱苹果就扛回来了。Mapreduce便是利用这个分工合作的思想去处理海量数据。
当然,这只是个非常浅显的例子,实际上Mapreduce内部还是十分复杂的,让我们来仔细探讨
官方文档介绍:
Mapreduce是一个编程模型,也是一个处理和生成超大数据集的算法模型的相关实现。用户首先创建一个Map函数处理一个基于key/value pair的数据集合,输出中间的基于key/value pair数据集合;再创建一个reduce函数用来合并所有的具有相同中间key值中间的value值。
Mapreduce架构的程序能够在大量的普通配置的计算机上实现并行化处理。这个系统在运行时只关心:如何分割数据,在大量计算机组成的集群上的调度,集群中计算机的错误处理,管理集群中的计算机之间必要的通信。采用Mapreduce架构可以使那些没有并行计算和分布式处理系统开发经验的程序员有效利用分布式系统的丰富资源。详见Google Mapreduce中文版。
Mapreduce六大过程
Input , Split , Map , Shuffle , Reduce ,Finalize
举个例子,还是买水果,嘻嘻。小明的大舅,二舅,小舅听说某宝上水果拼盘买二送一,拼盘里有苹果,梨子,橙子。大舅喜欢只喜欢吃苹果,二舅只喜欢吃梨子,小舅呢就喜欢吃橙子,于是准备先买回来再各取所需。很快,快递就到了,苦逼的小明又被派来提水果。看着这三箱水果(Input),小明找来了三个大力士好朋友,一人给他们分一箱抬回家(Split),回家之后,这三个人分别把自己箱子里的苹果,梨子,橙子区分开来放到一个袋子里(Map),然后小明说大家把苹果都给大力士1号,梨子给大力士2号,橙子给大力士3号(Shuffle),这样每个大力士就收到了三份,然后把这三份合起来装到一个箱子里(Reduce),然后等待被送给舅舅们(Finalize)。
单词分词例子,流程如下图: