它极大处所便了编程职员在不会分布式并行编程的情况下,将本身的递次运行在分布式体系上。 当前的软件完成是指定一个Map(映照)函数,用来把一组键值对映照成一组新的键值对,指定并发的Reduce(归约)函数,用来保证一切映照的键值对中的每一个同享雷同的键组。
事情道理(引荐进修:Java视频教程)
MapReduce实行流程
上图是论文里给出的流程图。一切都是从最上方的user program最先的,user program链接了MapReduce库,完成了最基本的Map函数和Reduce函数。图中实行的递次都用数字标记了。
1.MapReduce库先把user program的输入文件划分为M份(M为用户定义),每一份一般有16MB到64MB,如图左方所示分成了split0~4;然后运用fork将用户历程拷贝到集群内别的机械上。
2.user program的副本中有一个称为master,其他称为worker,master是担任调理的,为余暇worker分派功课(Map功课或许Reduce功课),worker的数目也是能够由用户指定的。
3.被分派了Map功课的worker,最先读取对应分片的输入数据,Map功课数目是由M决议的,和split一一对应;Map功课从输入数据中抽掏出键值对,每一个键值对都作为参数传递给map函数,map函数发生的中心键值对被缓存在内存中。
4.缓存的中心键值对会被按期写入当地磁盘,而且被分为R个区,R的大小是由用户定义的,未来每一个区会对应一个Reduce功课;这些中心键值对的位置会被转达给master,master担任将信息转发给Reduce worker。
5.master关照分派了Reduce功课的worker它担任的分区在什么位置(一定不止一个处所,每一个Map功课发生的中心键值对都能够映照到一切R个差别分区),当Reduce worker把一切它担任的中心键值对都读过来后,先对它们举行排序,使得雷同键的键值对群集在一起。由于差别的键能够会映照到同一个分区也就是同一个Reduce功课(谁让分区少呢),所以排序是必需的。
6.reduce worker遍历排序后的中心键值对,关于每一个唯一的键,都将键与关联的值传递给reduce函数,reduce函数发生的输出会添加到这个分区的输出文件中。
7.当一切的Map和Reduce功课都完成了,master叫醒正版的user program,MapReduce函数挪用返回user program的代码。
一切实行终了后,MapReduce输出放在了R个分区的输出文件中(离别对应一个Reduce功课)。用户一般并不须要兼并这R个文件,而是将其作为输入交给另一个MapReduce递次处置惩罚。全部过程当中,输入数据是来自底层分布式文件体系(GFS)的,中心数据是放在当地文件体系的,终究输出数据是写入底层分布式文件体系(GFS)的。而且我们要注意Map/Reduce功课和map/reduce函数的区分:Map功课处置惩罚一个输入数据的分片,能够须要挪用屡次map函数来处置惩罚每一个输入键值对;Reduce功课处置惩罚一个分区的中心键值对,时期要对每一个差别的键挪用一次reduce函数,Reduce功课终究也对应一个输出文件。
更多Java相干技术文章,请接见Java开辟教程栏目举行进修!
以上就是MapReduce道理的细致内容,更多请关注ki4网别的相干文章!