Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2068199
  • 博文数量: 103
  • 博客积分: 206
  • 博客等级: 入伍新兵
  • 技术积分: 1819
  • 用 户 组: 普通用户
  • 注册时间: 2012-09-12 10:24
个人简介

效字当先,以质为本。

文章分类
文章存档

2019年(2)

2018年(4)

2017年(7)

2016年(3)

2015年(14)

2014年(33)

2013年(31)

2012年(9)

分类: HADOOP

2014-06-16 21:52:42

    如果联系到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的工作;
  

























阅读(2490) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~