首先我在网上看到了一幅生动的图:
下面是场景:
当许多机器共同完成一件复杂的任务:
-首先将该复杂的任务拆分成若干小任务
-机器也分成三种:
–Master:负责调度,相当于包工头。
–Worker:其中Mapper负责接收数据然后干活(工人拿到砖头等开始干活砌墙等);另一类Worker叫Reduce,负责将墙啊,屋顶啊,地板啊等组成一个房子,很多个房子又组成小区。
举例来说,统计一系列文档中的词频。文档数量规模很大,有1000万个文档,英文单词的总数可能只有3000(常用的)。那么input M=10000000,output N=3000。于是,我们搞了10000个PC做Mapper,100个PC做Reducer。每个Mapper做1000个文档的词频统计,统计之后把凡是和同一个word相关的统计中间结果传给同一个Reducer做汇总。比如某个Reducer负责词表中前30个词的词频统计,遍历10000个PC,这10000个Mapper PC把各自处理后和词表中前30个词汇相关的中间结果都传给这个Reducer做最终的处理分析。至此MapReduce最核心的流程已经说明白了。
其实MapReduce讲的就是分而治之的程序处理理念,把一个复杂的任务划分为若干个简单的任务分别来做。另外,就是程序的调度问题,哪些任务给哪些Mapper来处理是一个着重考虑的问题。MapReduce的根本原则是信息处理的本地化,哪台PC持有相应要处理的数据,哪台PC就负责处理该部分的数据,这样做的意义在于可以减少网络通讯负担。
后边例子的参考:
链接:https://www.zhihu.com/question/23345991/answer/53996060
来源:知乎