MapReduce 思想解析
MapReduce采用"分而治之"的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个分节点共同完成,然后通过整合各个节点的中间结果,得到最终结果。简单地说,MapReduce就是"任务的分解与结果的汇总"。
二:在hadoop中
在Hadoop中,用于执行MapReduce任务的机器角色有两个:一个是JobTracker;另一个是TaskTracker,JobTracker是用于调度工作的,一般运行在NameNode机器上;TaskTracker是用于执行工作的,负责在节点DataNode上执行具体的分布式任务的计算。一个Hadoop集群中只有一台JobTracker。
三:在分布式计算中
在分布式计算中,MapReduce框架负责处理了并行编程中分布式存储、工作调度、负载均衡、容错均衡、容错处理以及网络通信等复杂问题,把处理过程高度抽象为两个函数:map和reduce,map负责把任务分解成多个任务,reduce负责把分解后多任务处理的结果汇总(combine)起来。
四: 需要注意的是
,用MapReduce来处理的数据集(或任务)必须具备这样的特点:待处理的数据集可以分解成许多小的数据集,而且每一个小数据集都可以完全并行地进行处理。
五:过程讲解
在Hadoop中,每个MapReduce任务都被初始化为一个Job。每个Job又可以分为两个阶段:map阶段和reduce阶段。在map阶段,由map函数会接受一个如<key,value>形式的输入,然后产生一个<key, value>形式的中间输出。Hadoop会将所有具有相同key值的<key, value>输入集合(combine)到一起,传递给第二阶段的reduce函数,所以reduce 函数看到的将不是<key, value>,而是<key, list of values>。第二阶段的reduce 函数会对这个每个<key, list of values>进行处理,然后选择产生0个或1个最终的<key, value>输出。之所有选择类似map输出的<key, value>形式作为 reduce 输出也是考虑到这样的输出不需要处理就可以直接作为下一个map的输入,这样的模型最终可以方便对海量数据进行多重处理和分析(易于实现和扩展)。
六:例子与拓展
其实MapReduce 模型简单易懂,但是运用起来还是有很多经验和讲究的。比如,如果要做到对海量同源数据进行分析和归类,例如,淘宝网需要分析购买某种商品的用户还喜欢购买哪些别的商品,帮助用户找到志趣相投的其他用户或者卖家。在使用MapReduce进行数据分析挖掘的时候,如何选取key是相当重要的。key选择得当,可以让数据本身得到合并,并在reduce中来进行统计。这就有点像SQL语句中的表连接,如何选取join的column对于分析的效率和结果集的大小、正确性都是至关重要的。