如果联系到hadoop集群的话,其实到现在才真正的明白这个MR。我的理解偏差了好多,下面大概讲讲(口语,不专业),不对的地方还请指正;
你程序中写的MR函数,运行程序,这里叫做提交作业,Jobtracker接到作业后会分析MR的规则(如果你不特定规则它会按照系统默认的规则),比如需要多少个map,按照什么分map等规划,然后分配具体任务给每个Tasktracker去执行,待每个Tasktracker按照先map后reduce计算完毕后会把reduce结果汇总给Jobtracker,最终Jobtracker把结果返回给客户端;
这个流程你可以这样理解:
MR就是需求----Jobtracker分析此需求并制定计划发送任务给Tasktracker(多个)---Tasktracker就是工人接到任务开始干活并报告结果(map和reduce的函数执行是在这里进行的)---Jobtracker最终汇总所有Tasktracker的报告结果输出;
再拿施工队的例子解释:
MR就是给工头L(Jobtracker)看的图纸,L(Jobtracker)分析图纸后知道如何建造这个房子了,比如先地基,再柱子等等,然后根据实际情况分任务,地基技术比较简单,那就给A
(Tasktracker1)这个工人,柱子适合给B(
Tasktracker2)这个工人,分配好后,A和B就开始干活了,待AB都干完了,告诉L,我们做完了。OK,任务完成,L说房子可以交工了,任务完成;
下面具体是的map和reduce函数都怎么计算数据的,稍稍专业点:
上一篇也简单提到了Hadoop中的MapReduce(下面都简写为MR)是一种分布式计算模型,起初由Google提出,主要用于搜索领域,解决海量数据的计算问题。MR由两个阶段组成:Map和Reduce,用户只需要实现Map()和Reduce()两个函数,即可实现分布式计算,这两个函数的形参是key、value对,表示函数的输入信息。
1、MR的执行流程
2、MR原理
MR框架是由一个单独运行在主节点上的JobTracker和运行在每个集群从节点上(Hadoop集群采用主从结构模型Master和Slave)的TaskTracker共同组成,这里顺便提下:JobTracker可以运行于集群中的任意一台计算机上,负责分配和监控TaskTracker的执行,TaskTracker负责执行任务,它必须运行在DataNode上。JobTracker将map任务和reduce任务分发给空闲的TaskTracker,这些任务并行运行,并监控运行情况。
1、Map任务处理
读取输入文件内容,对输入文件的每一行,解析成key,value对,按照自己的逻辑,对不同分区的数据,按照Key进行排序、分组,相同key的value放到一个集合中。
在集群中就是每个节点处理自己的key,value值,最后汇总给Reduce函数去处理;
2、Reduce任务处理
对多个map任务的输出,按照不同的分区,通过网络copy到不同的reduce节点,合并排序,最后把reduce的输出保存到文件中。
形象化的解释MR就是Linux中经常用的命令: cat xxx.txt |grep "abc" |wc -l 其中grep是Map任务,wc -l是reduce任务;
最后:MR不是Hadoop特有的,只是在集群中操作MR能体现出性能的优势,多点并发执行,最后综合结果;Map不能做reduce的工作,但reduce可以做map的工作;
阅读(2672) | 评论(0) | 转发(0) |