兰州马子禄牛肉面总店:[转]MapReduce执行流程
来源:百度文库 编辑:中财网 时间:2024/04/29 14:33:00
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: 在分割之后的每一对
进行用户定义的Map进行处理,生成新的 对
- Step 3: 对Map返回的中间结果集归拢排序
- Step 4: 将分组过的中间结果集传给Reduce操作,通过计数生成最后结果