MapReduce执行流程

来源:互联网 发布:红蜘蛛网络怎么解控制 编辑:程序博客网 时间:2024/05/21 17:51

转载:可详细了解map/reduce执行的过程

MapReduce的概念:

处理和生成海量数据的并行编程模型;

用于大规模数据集(通常大于1TB)的并行运算;

MapReduce的核心是Map和Reduce两个函数:

Map,映射,对列表中的所有元素进行指定的操作,返回基于这个处理的中间结果集;

Reduce,化简,对中间结果集进行分类和归纳得到最终的计算结果;

两个函数可能会并行运行普通的PC机集群上;


MapReduce算法的调用过程:

   1.在用户的应用程序中,MapReduce库首先将计算所需的输入文件分割成M块(每块从16MB到64MB不等,可由用户指定),然后在集群上的多台机器上启动相同程序的副本;   2.在启动的所有程序副本中,有一个比较特殊,作为Master程序,剩下的机器被称为Worker,(假设有M个Map任务,R个Reduce任务),Master会挑选所有空闲中的Worker来指派给其Map或者Reduce任务;   3. 分配到Map任务的Worker会自动去读取被分割过的文件,通过运行用户定义的Map操作,来解析处理输入的数据,生成键值对,并不断的抛出;这些中间键值对构成中间结果集,会被缓存在内存中;   4.因为内存的大小有限,每隔段时间,缓存的中间结果集会被写到执行Map任务的及其的硬盘上,在写之前,这些中间结果集会被Partition函数分隔成块,这些块的位置会报告给Master程序,因为这些文件将会作为Reduce任务的输入;   5.当Reduce Worker受到Master程序发来的中间结果集任务时,通过远程调用来读取Map Worker上缓存的中间结果集,读取完毕之后,Reduce Worker会将中间结果集排序,所以相同的Key的键值对会排到一块,如果中间结果集太大,则使用外部程序来排序;   6.Reduce Worker通过遍历排序过的中间结果集,对于相同key的键值对进行合并化简,Reduce任务的结果将会被作为结果写入到GFS文件系统中;   7.当所有的Map和Reduce操作都完成的时候,Master程序会唤醒用户的程序,通知其任务已经完成,继而执行其他的任务;

执行过程中的文件存储位置:

源文件:GFS

Map处理结果:本地存储

Reduce处理结果:GFS

日志:GFS


MapReduce示例:单词统计

案例:单词记数问题(WordCount)

给定巨大的文本文件(大于1TB),如何计算文件中所有单词出现的数目?

使用MapReduce求解该问题

定义Map和Reduce函数(Pseudo Code)

Map函数,以键值对作为输入,经过处理后抛出中间结果的键值对(key,value),MapReduce库会收集Map函数抛出的结果,并且把具有相同的键的键值对分组;

Reduce函数接受MapReduce库分过组的(key,value[]),然后对具有相同键的中间结果集进行规约,返回给MapReduce库,最后得到计算结果;

Step 1: 自动对文本进行分割

Step 2:在分割之后的每一对(key, value)进行用户定义的Map进行处理,生成新的(key,value)对

Step 3: 对Map返回的中间结果集归拢排序

Step 4: 将分组过的中间结果集传给Reduce操作,通过计数生成最后结果

0 0
原创粉丝点击