Hadoop2.x较Hadoop1.x来说,变化非常大,主要主要体现在Hadoop2.x引入了“Yarn”这个核心部件。
hadoop1.x有两大部件,HDFS和MadpReduce,其中HDFS(Hadoop Distributed Files System)用于分布式存储文件,便于集群中各机器从上面读取和写入文件(数据),MadpReduce则是Hadoop的两个核心进程,Map负责对数据块的分片,Reduce对Map进程出来的结果进行聚合,排序,写入到HDFS中。从上图中,对于hadoo1.x来说,HDFS和MapReduce是两个相互依赖的关系,而对于hadoop2.x,在HDFS和MapReduce之间增加了Yarn部件,这个暂且可以理解为是一个“管理平台”,MapReduce就变成了一个可插拔的“插件”,它不仅仅允许hadoo自身的部件使用,还允许其他的数据处理插件接入到hadoop的生态上,如spark。
首先,简单了解hadoop1.x的MapReduce工作原理:
当客户端CLient提交任务给hadoop集群时,在master节点上启动JobTracker进程,负责任务的资源管理和作业调度及监控,JobTracker根据任务需要,决定开启哪些机器的资源,将作业分配给哪些机器,然后在那些机器上启动TaskTracker,真正的工作执行会在TaskTracker的机器上面。从上图,可以看出一个问题,JobTrack属于单节点,每台机器都要与master节点建立关系,其责任非常大,如果master节点出现异常,那么整个程序就会非常紧张。因此,hadoop2.x分散了JobTrack的权利。
hadoop2.x的MapReduce工作原理:
hadoop2.x将JobTracker的资源管理给了RM(Resource Manager),作业调度及监控分给了AM(App Master)。RM有一个可插拔的调度组件Scheduler(纯属的调度器),负责运行中的各种应用分配资源,不负责应用程序的监控和状态跟踪。当客户端提交一个任务请求,RM接收到了,就会寻找一个合适的机器启动AM(RM只负责“寻找”这个动作),真正启动AM进程的是NM(Node Manager),NM是负责给当前所在机器执行的任务分配资源,来运行MapReduce操作,而Container就是所谓的资源,AM本质上也是一个Container(即,资源),只是AM不进行作业的执行,只负责下面各个Container的作业调度及监控;回过来,当NM启动了AM之后,AM就会根据任务来决定向RM请求所需要的机器、资源来完成任务,同样的,RM分配了机器之后,Container还是由各个机器的NM来启动,每个Container都和AM建立关系。当任务正式跑起来了,NM和AM也不是闲着,NM负责监控当前机器是否正常运行,AM负责监控其作业的状态。
举个比较形象的例子:RM是一个房产,可插拔调度器Scheduler相当于一个中介平台,客户需求来了,需要开设美容院,那么中介平台就会到各个区域(一台机器相当于一个区域)寻找一个适合客户需求的地方给客户开设办公总部大楼,这个总部大楼就是AM,美容院总部需要开分店来实现营收,那么美容院总部(AM)就会向房产(RM)请求多一点区域来开分店,假设中介平台(Scheduler)根据需求找到了两个区域给美容总部,具体分配哪个铺位(资源)给它开店呢?中介平台(Scheduler)把这个任务交给了各个区域的销售商(NM),每个区域的销售商(NM)根据需求给美容院总部(AM)提供足够多的信息,找到了合适的铺位(Container)开分店了,现在美容院正式开始运作了。其中体现了两组角色的关系,房产——中介平台——销售商,美容院总部——美容院分店。对于第一组关系,销售商(NM)并不是说帮美容院找到铺位就完事了,它还要监控美容院是不是真的是做美容业务,而不是开游戏厅之类的,还要负责这个美容院所在的铺位这个硬件是否正常,然后定期向中介平台(Scheduler)或者说房产(RM)汇报情况,当铺位出现问题,无法让美容院正常运作,那么销售商(NM)安排当前区域的其他铺位,如果所有铺位都爆满了或所有铺位都不能用了,那么中介平台(Scheduler)就要马上安排另外的区域给美容院开分店。对于第二组关系,各个美容院分店(COntainer)定期向总部(AM)汇报经营情况。
对于提交给集群的每个作业,会启动一个专用的,短暂的JobTracker来控制任务的执行,短暂的JobTracker由从属节点上的TaskTracker负责启动,而不再是hadoop1.x的时候,由主节点启动。
各节点、进程的概念与功能:
RM:
- RM处理客户端请求,接受JobSubmitter提交的作业,按照做的上下文信息。以及从NM收集来的状态信息,启动Scheduler,分配一个Container作为AM;
- RM拥有为系统中所有资源分配的决定权,是中心服务,做的事情就是调度、启动每一个Job所属的Application、另外监控App里擦体哦那给的存在情况与运行在每个节点上的NM进程交互,通过心跳通信,大道监控NM的目的。
NM:
- 是slave节点的进程,类似TaskTracker的角色,是每台机器框架的代理,处理来自RM的请求;
- 接收并处理来自AM的Container启动、停止等各种请求;
- 负责地区哦那个应用程序的Container(执行应用程序的同期),并监控他们的资源使用情况(包括:CPU、内存、磁盘和网络),并报告RM;
AM:
- 应用程序的Master,每一个用用程序对应一个AM,在用户提交一个应用程序时,一个AM的轻量型进程实例就会启动,AM协调应用程序内的所有任务的执行;
- 每一个Application(对应hadoop1.x的Job)都有一个AM,AM运行在RM之外的机器上;
- 与RM协商资源、与NM协同工作、与Scheduler协商合适的Container进行Container的监控;
- 本质也是一个Container;
Container:
- 是任务运行环境的抽象封装;
- Container只是使用NM上指定资源的权力;
- AM必须向NM提供更多的信息来启动Container;
- 描述任务的运行资源(节点、内存、CPU)、启动命令和运行环境
最后附上Yarn框架运行流程图: