分布式处理之 MapReduce

方法介绍

MapReduce 是一种计算模型,简单的说就是将大批量的工作(数据)分解(map)执行,然后再将结果合并成最终结果(reduce)。这样做的好处是可以在任务被分解后,通过大量机器进行分布式并行计算,减少整个操作的时间。也就是说,MapReduce 的原理就是一个归并排序。

它的适用范围为数据量大,但是数据种类小可以放入内存的场景。基本原理及要点是将数据交给不同的机器去处理,数据划分,结果归并。

MapReduce 模式的主要思想是将要执行的问题(如程序)自动拆分成 Map(映射)和 Reduce(化简)的方式,其流程图如图 6-4 所示。
在这里插入图片描述

在数据被分割后通过 Map 函数的程序将数据映射成不同的区块,分配给计算机机群处理达到分布式运算的效果,在通过 Reduce 函数的程序将结果汇整,从而输出开发者需要的结果

MapReduce 借鉴了函数式程序设计语言的设计思想,其软件实现是指定一个 Map 函数,把键值对(key/value)映射成新的键值对(key/value),形成一系列中间结果形式的 key/value 对,然后把它们传给Reduce(规约)函数,把具有相同中间形式 key/value 合并在一起。Map 和 Reduce 函数具有一定的关联性。函数描述如表 6-1 所示:

在这里插入图片描述

MapReduce 致力于解决大规模数据处理的问题,因此在设计之初就考虑了数据的局部性原理,利用局部性原理将整个问题分而治之MapReduce 集群由普通 PC 机构成,为无共享式架构。在处理之前,将数据集分布至各个节点。处理时,每个节点就近读取本地存储的数据处理(map),将处理后的数据进行合并(combine)、排序(shuffle and sort )后再分发(至 reduce 节点),避免了大量数据的传输,提高了处理效率。无共享式架构的另一个好处是配合复制(replication)策略,集群可以具有良好的容错性,一部分节点的 down 机对集群的正常工作不会造成影响。

Hadoop 是一个实现了 MapReduce 模式的开源分布式并行编程框架。图 6-5 是有关 Hadoop 的作业调优参 数 及 原 理 , 左 边 是 map 任 务 运 行 示 意 图 , 右 边 是 reduce 任 务 运 行 示 意 图 。
在这里插入图片描述

如图 2 所示,其中 map 阶段,当 map 任务 开始运算, 并产生中间数据后并非直接而简单的写入磁盘它首先利用内存缓冲区来对已经产生的 buffer 进行缓存,并在内存缓存区 中进行一些预排序来优化整map 的性能。 而上图右边的 reduce 阶段则经历了三个阶段,分别 Copy->Sort->Reduce。我们能明显地看出其中的 Sort 是采用的归并排序(merge sort)。