一、MapReduce是什么?
Mapreduce是一个易于编程并且能在大型集群(上千节点)快速地并行得处理大量数据的软件框架,以可靠,容错的方式部署在商用机器上。
MapReduce=Map(映射函数) + Reduce(规约函数)
Map:即把复杂的任务分成可以用相同方法解决的小数据块,然后把这些小数据块分发到不同的工作节点上,进行并行计算。
Reduce:即对map阶段的结果进行汇总输出。
自我理解:
比如我们要统计图书馆有多少本书,每人数一个书架。这就是“Map”。
数完之后我们到一起,把所有人的统计数加在一起。这就是“Reduce”。
二、hadoop1.x MapReduce1的架构设计
MapReduce1的架构是主从架构。一个JobTracker(主节点)带多个TaskTracker(从节点),从节点通过向主节点发送心跳信息(heartbeat)来告诉它自己的运行情况,而主节点则是负责管理调度的工作。
Client:客户端,负责提交申请。
JobTracker :是作业的管理者。将作业分解成一堆的任务(task,又分为map task和reduce task),然后将任务分派给TaskTracker运行,并进行作业的监控、容错处理(task作业挂了,重启task的机制等)。
TaskTracker:任务的执行者。 在TaskTracker上运行task,并且会与JobTracker 进行交互(向JobTracker汇报本节点的健康状况、资源使用情况、作业执行情况。)。
Map Task :自己开发的map任务交由task进行处理, 解析每条记录的数据,然后交给自己的map方法处理, 将map的输出结果写到本地磁盘。
Redece Task:将Map Task输出的数据进行读取, 按照数据进行分组传给编写的reduce方法处理,将输出结果写到HDFS。
Task Scheduler:任务调度器。
(1)客户端先提交MapReduce作业到JobTracker中,
(2)JobTracker再将任务传给Task Scheduler(任务调度器),
(3)Task Scheduler将调度好的任务再传给JobTracker,
(4)JobTracker再将调度好的任务分发给TaskTracker,
(5)TaskTracker再利用内部的Map Task和Reduce Task进行内部的资源调度进行执行作业,
(6)作业完成之后,再依次将“作业完成”的信息传给客户端。
三、hadoop2.x MapReduce2的架构设计(YARN的运行机制)
hadoop2.x的架构去掉了JobTracker和TaskTracker,用ResourceManager和NodeManager替代。
Client:客户端,用来提交作业。
ResourceManager(RM):资源管理器,协调集群上的计算资源的分配 。
ApplicationMaster(AM):应用管理器(上图为MR AppMstr),协调运行MapReduce任务,他和应用程序任务运行在container中,这些container由RM分配并且由NM进行管理。
NodeManager(NM):负责启动和监控集群上的计算容器(container)。
containers:容器(对应MapReduce1中的任务槽),是将资源隔离出来的一种框架,每一个任务对应着一个container,且只能在该Container上运行。应用管理器(AM)和资源管理器(RM)协调这个计算资源containers。
(1)Client向ResourceManager提交jar应用程序;
(2)ResourceManager收到申请后,启动NodeManager,并在NodeManager启动应用程序ApplicationMaster;
(3)ApplicationMaster被启动后,再向ResourceManager进行注册,以便用户可以直接在ResourceManager中查看应用程序的运行状态;
(4)同时ApplicationMaster向ResourceManager提交资源申请;
(5)ApplicationMaster取得资源后,再给相应的NodeManager发送请求;
(6)NodeManager在接到了启动任务的要求后,设置好任务的运行环境,并启动MapTask和ReduceTask;
(7)ReduceTask任务和MapTask任务在运行的过程中实时向ApplicationMaster汇报工作的进度和状态;
(8)任务运行完成后,ApplicationMaster向ResourceManager注销并关闭自己。
四、MapReduce的执行步骤
通过上图可以看出,MapReduce在执行过程中被拆成Map阶段和Reduce阶段,分别交给Map Task和Reduce Task进行处理,数据在Map Task阶段根据空格将数据块中的单词分割出来,每读一个单词,就产生一条记录,然后shuffle阶段进行“洗牌”重新调整归类,再在Reduce Task阶段合并计算,最后输出整合之后的结果。
网友评论