MapReduce

作用:MapReduce是一个用于处理和生成大型数据集的程序模型。
实现:用户使用map函数处理输入的键值对来生成一组中间的键值对,使用reduce函数合并中间键值对中相同的键(中间数据是通过迭代的方式来提供给reduce函数的,这样就可以处理内存无法满足的大量数据)
优点:运行时,系统负责划分数据,在一组机器上调度程序的执行,处理机器故障和管理所需机器间通信的细节,对使用人员友好不必去了解系统内部的细节。

在这里插入图片描述
步骤:
(1)用户程序中的MapReduce库首先将输入文件分成M份,每份的大小一般都是16-64MB,这个可以由用户可选参数控制,然后便会将程序在集群的机器上拷贝
(2)有一个程序为master负责分配任务,其他程序为worker用来接收master分配的任务,一共有M个Map任务和R个Reduce任务等待分配,master会选择空闲的worker,然后分配map或reduce任务给他们
(3)当一个worker接收到一个map任务时,便会读取对应的输入。会从输入文件中解析出一组键值对,并将每一个键值对一次传给用户自定义的map函数,而map函数输出的中间键值对会被保存到内存中去
(4)被缓存的键值对会阶段性的写回本地磁盘,并被划分函数分割成R份。这些缓存对在磁盘上的位置会被回传给master,master再负责将这些位置转发给Reduce worker
(5)当Reducer worker从master那里接收到这些位置信息时,它会使用远程过程调用从Map worker的本地磁盘获取缓存的数据。当Reducer worker读入全部的中间数据后,它会根据中间键对它们进行排序,这样所有具有相同键的键值对都聚集在一起了。排序是必须的,因为会有许多不同的键被映射到同一个reduce task中。如果中间的数据的数据量太大,不能一次性装入内存的话,还需要外部排序。
(6)Reduce worker遍历已经排完序的中间数据,每当遇到一个新的中间键,它会将key和相应的中间值传递给用户定义的Reduce函数,Reduce函数的输出会被添加到Reduce部分的输出文件中。
(7)当所有的Map tasks和Reduce tasks都已经完成的时候,master将唤醒用户程序,用户代码中的MapReduce调用返回。

master结构:
master会保存若干个数据结果,对每一个map任务和reduce任务,它会保存他们的状态(空闲,进行中,已完成),以及对应的worker机器。
master作为map任务中间输出到reduce任务的管道,因此对每一个已完成任务的map任务,master会保存R份中间数据文件的大小和位置,当map任务不断完成时不断更新信息,这些信息会不停的添加到reduce的worker机器上。

参考:
MapReduce: Simplified Data Processing on Large Clusters
翻译

©️2020 CSDN 皮肤主题: 程序猿惹谁了 设计师: 上身试试 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值