概述
简介
1.YARN,负责集群的资源调度和任务管理的框架
2.YARN是Hadoop2.x中提供了的一个框架,也是Hadoop2.x中最重要的特性之一。正因为YARN的出现,导致Hadoop1.x和Hadoop2.x不兼容。
3.YARN的产生原因
1.内部原因
1.在YARN出现之前,Hadoop中的任务管理是MapReduce来完成,也因此在Hadoop1.x中,MapReduce也是主从结构,主节点Job Tracker,从节点Task Track,其中Job Tracker负责接收任务,管理Task Tracker,负责集群的资源调度和任务管理,从节点Task Tracker负责执行任务。这也意味着,Job Tracker在接收到任务之后,需要负责拆分具体的任务,为每一个子任务分配资源,还需要将每一个子任务分配给Task Tracker执行,并且Job Tracker还需要监控每一个子任务的执行情况。此时就会发现,如果Task Tracker数量比较少,那么JobTracker的监控任务还相对轻松,如果Task Tracker数量增多,Job Tracker的监控就大大增加。在hadoop1.x的官方文档中给定,Job Tracker最多能够管理4000个Task Tracker。如果超过这个数量,Job Tracker的效率 会成倍下降。
2.在Hadoop1.x中,作为核心节点的JobTracker还只允许存在1个,就意味着容易存在单点故障。
2.外部原因
1.在Hadoop产生的时候,市面上几乎没有大数据处理框架,因此Hadoop在设计的时候,只考虑MapReduce的资源分配问题
2.随着大数据的发展,产生了越来越多的大数据框架,非常多的计算框架都是基于Hadoop集群的资源来进行使用,因为开始的时候Hadoop设计没有考虑到这些计算框架,所以就导致后来产生的这些计算框架之间会产生资源调用冲突
基本结构
1.YARN本身也就是典型的主从架构:主进程是ResouceManger,从进程是Node Manager
1.ResouceManager的职责:对外接受任务,管理Node Manager以及ApplicationMaster
2.Node Manager的职责:执行任务以及管理本节点上的资源
2.注意:ResouceManager管理整个集群的资源,Node Manager负责管理自己节点的资源
工作流程
工作流程
简述
1.客户端会通过Yarn Runner向ResouceManger申请一个任务,此时不需要告知ResourceManage这个任务的类型和具体内容
2.ResouceManager收到请求之后,会将该Application的资源存储路径返回给客户端
3.客户端在接收到路径之后,会将运行这个任务所需要的资源和资源依赖提交到指定的路径下。资源提交完成之后,客户端会向ResourceManager申请MRAppMaster。每一个任务对应一个单独的ApplicationMaster
4.ResouceManager收到请求之后,会将这个任务初始化,等待Node Manager来领取任务
5.NodeManager通过心跳领取到任务之后,会给这个任务创建容器,并且会产生这个任务的App Master;然后Container会将这个任务执行的逻辑和依赖从指定路径中下载到当前的Node Manger上
6.ApplicationMaster获取到任务的执行逻辑和依赖之后,会进行拆分,拆分成子任务,然后向ResoucceManager发送请求,请求获取执行这个任务需要的资源。
7.当这个Application所有的子任务都结束之后,ApplicationMaster会将ResouceManager发送结束信号,并且会向ResouceManager申请注销自己。
详细
1.任务提交阶段
1.Client调用job.waitForCompletion提交任务。waitForCompletion方法封装了submit方法,submit方法中创建了JobSubmitter对象,对象创建之后调用submitJoabInternal将Map Reduce任务提交到YARN集群上
2.提交之后,JobSubmitter对象向ResouceManager申请一个Application ID,并且这个过程中,JobSubmitter也会检查输出路径的情况以及计算切片
3.Resource Manager收到请求之后,为这个任务生成一个ID,然后将这个ApplicationID以及资源的存储路径返回给Job Submitter
4.Job Submitter收到路径之后,会将这个Map Reduce程序打成jar包,然后将这个逻辑jar包、依赖jar包、配置文件以及计算产生切片信息提交到指定的路径shang
5.Job Submitter提交完资源之后,会通知ResouceManager调用subitApplication方法提交任务
2.任务初始化阶段
1.ResouceManager收到请求之后,调用submit Application方法,通知YARNScheduler,将该任务放到调度器的队列中暂存,ResouceManager等待Node Manager的心跳
2.当一个NodeManager发送心跳之后,就会通过心跳从调度器中领取一个任务回来。Node Manager领取到任务之后,会创建Container从指定路径下载资源,然后产生Application Master用于管理这个任务
3.任务分配阶段
1.Application Master启动之后,会对任务进行拆分,拆分成子任务Map Task和Reduce Task,拆分完成之后,Application Master就会向ResouceManager申请Map Task执行需要的资源
2.ResoceManager收到请求之后,会将这些子任务执行需要的资源描述返回给Application Master
3.Application Master收到资源描述之后,通过分发脚本将Map Task分配对应的Node Manager上来
4.任务执行阶段
1.Node Manager领取到子任务Map Task之后,会创建Container,下载对应的资源,然后启动Yarn Child进程来执行这个子任务Map Task
2.Application Master监控这些Map Task的执行情况,当达到阈值的时候,Application Master就会向ResouceManager申请ReduceTask的执行占用资源
3.ResouceManager,Node Manager创建Container下载资源,启动Yarn Child执行这个ReduceTask
5.进度和状态更新
1.在YARN中,每一个子任务将自己的执行进度和执行状态返回给Application Master,客户端可以定时的向Application Master请求获取任务的执行状态并更新给用户
6.任务完成阶段
1.客户端除了会定时监控任务的执行进度外,客户端还会定时的调用waitforcompletion方法来检查任务是否完成
2.任务完成之后,ApplicationMaster和Container会清理任务状态,之后Application Master会给ResouceManager发送结束信号并且申请注销自己。因为默认Application Master会清理任务状态,所以这种方式不利于任务的回溯,因此一般会配置历史服务器用于存储执行日志。