今天来一起学习一下MapReduce :hadoop的并行分布式计算模型
【什么是Map/Reduce】
看看下面的各种解释:
(1)MapReduce是hadoop的核心组件之一,hadoop要实现分布式需要包括两部分,一部分是分布式文件系统hdfs,一部分是分布式计算框架mapreduce,缺一不可,也就是说,可以通过mapreduce很容易在hadoop平台上进行分布式的计算编程。
(2)Mapreduce是一种编程模型,是一种方法,抽象理论。
好嗨哟,感觉人生已经到达了巅峰!!!!!!!
现在说一下工作原理啊,对的不对的,都多提提意见,帮帮我这菜鸟!
关于这个 我可以举一个例子一用来方便了解:
上图是论文里给出的MapReduce流程图。一切都是从最上方的user program开始的,user program链接了MapReduce库,实现了最基本的Map函数和Reduce函数。图中执行的顺序都用数字标记了。
(1)MapReduce库先把user program的输入文件划分为M份(M为用户定义),每一份通常有16MB到64MB,如图左方所示分成了split0~split4;然后使用fork将用户进程拷贝到集群内其它机器上。
(2)user program的副本中有一个称为master,其余称为worker,master是负责调度的,为空闲worker分配作业(Map作业或者Reduce作业),worker的数量也是可以由用户指定的。
(3)被分配了Map作业的worker,开始读取对应分片的输入数据,Map作业数量是由M决定的,和split一一对应;Map作业从输入数据中抽取出键值对,每一个键值对都作为参数传递给map函数,map函数产生的中间键值对被缓存在内存中(环形缓冲区kvBuffer)。
(4)缓存的中间键值对会被定期写入本地磁盘(spill),而且被分为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的代码。
:::::以上为转载,因为现在的学习能力并不能总结完整!
作者:奋斗的小炎
来源:CSDN
原文:https://blog.csdn.net/Little_Fire/article/details/80605233
版权声明:本文为博主原创文章,转载请附上博文链接!