1.1 模块架构模型

MapReduce基于Google发布的分布式计算框架MapReduce论文设计开发,用于大规模数据集(大于1TB)的并行运算,特点如下:

易于编程:程序员仅需描述做什么,具体怎么做就交由系统的执行框架处理。

良好的扩展性:可以添加机器扩展集群能力。

高容错性:通过计算迁移或数据迁移等策略提高集群的可用性与容错性。

图1-1 MapReduce的执行过程

Map端:

  1. 分片。每个输入分片由一个map来处理,默认情况下,以HDFS的一个块的大小(默认为128M)为一个分片,块大小可设置。map输出的结果会暂且放在一个环形内存缓冲区中,当该缓冲区快要溢出时,会在本地文件系统中创建一个溢出文件,将该缓冲区中的数据写入这个文件。

  2. 分区。在写入磁盘之前,线程根据reduce任务的数目将数据划分为相同数目的分区,也就是一个reduce对应一个分区的数据。分区就是对数据进行hash的过程,这样做的目的是让尽可能少的数据写入到磁盘。

  3. 合并。当map任务输出最后一个记录时,可能会有很多的溢出文件,这时需要将这些文件合并。合并的过程中会不断地进行排序和合并操作,目的有两个:①.尽量减少每次写入磁盘的数据量;②.尽量减少下一复制阶段网络传输的数据量。最后合并成一个已分区且已排序的文件。

  4. 复制。将分区中的数据拷贝给相对应的reduce任务。

Reduce端:

  1. 合并排序。Reduce会接收到不同map任务传来的数据,并且每个map传来的数据都是有序的,后台线程会将它们合并成一个更大的有序的文件。合并的过程中会产生许多的中间文件(写入磁盘),但MapReduce会让写入磁盘的数据尽可能少,并且最后一次合并的结果并没有写入磁盘,而是直接输入到reduce函数。

  2. Reduce。处理合并后的数据。

results matching ""

    No results matching ""