MapReduce原理,mapreduce原理和流程
MapReduce是大规模数据集(大于1TB)并行操作的编程模型。 Map 和 Reduce 这两个概念是他们的主要思想,这两个概念是从函数式编程语言借来的,从向量编程语言借来的特性。
如何解决写爬虫IP受阻的问题?立即使用。
它极大地方便了程序员在分布式系统上运行自己的程序,而无需分布式并行编程。当前的软件实现是指定一个映射函数来将一组键-值对映射到一组新的键-值对,并指定一个并发的Reduce函数来确保所有映射的键-值对共享同一个键组。
工作原理(推荐学习:Java视频教程)
MapReduce执行流程
上图是论文中给出的流程图。一切从顶层用户程序开始,链接MapReduce库,实现最基本的地图功能和Reduce功能。图中的执行顺序用数字标记。
1.MapReduce库首先将用户程序的输入文件分成M份(M由用户定义),每份通常为16MB到64MB,分为split 0 ~ 4,如左图所示;然后使用fork将用户进程复制到集群中的其他机器上。
2.2.user程序的一个副本称为master,其他的称为Workers。master负责调度,分配作业(映射作业或减少作业)给空闲的工人,工人数量也可以由用户指定。
3.分配了地图作业的工人开始读取相应切片的输入数据,地图作业的数量由M确定,对应于一个一个拆分;地图作业从输入数据中提取键值对,每个键值对作为参数传递给地图函数。map函数生成的中间键值对缓存在内存中。
4.缓存的中间键值对会定期写入本地磁盘,它们被分成R个区,大小由用户定义。将来,每个区域将对应一个Reduce作业;这些中间键值对的位置将被通知给master,master负责将信息转发给Reduce worker。
5.master通知分配了Reduce作业的worker它所负责的分区所在的位置(必须有不止一个位置,并且每个映射作业生成的中间键值对可以映射到所有R个不同的分区)。当Reduce worker读取它所负责的所有中间键值对时,首先对它们进行排序,以便相同键的键值对聚集在一起。因为不同的键可能会被映射到同一个分区,也就是同一个Reduce作业(谁想要更少的分区?),排序是必须的。
6.reduce worker遍历排序后的中间键值对。对于每个惟一键,键和相关值被传递给reduce函数,reduce函数生成的输出将被添加到该分区的输出文件中。
7.当所有的Map和Reduce作业完成后,master唤醒真正的用户程序,MapReduce函数调用返回用户程序的代码。
在所有的执行之后,MapReduce输出被放在R个分区的输出文件中(分别对应一个Reduce作业)。通常,用户不需要合并这些R文件,而是将它们作为输入给另一个MapReduce程序进行处理。整个过程中,输入数据来自底层分布式文件系统(GFS),中间数据放在本地文件系统,最终输出数据写入底层分布式文件系统(GFS)。而且要注意Map/reduce作业和Map/Reduce函数的区别:Map作业处理一片输入数据,可能需要多次调用Map函数来处理每一个输入的键值对;reduce作业处理一个分区的中间键-值对,在此期间,Reduce函数为每个不同的键调用一次,Reduce作业最终对应于一个输出文件。
更多Java相关技术文章,请访问Java开发教程专栏学习!以上是MapReduce原理的详细内容。更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。