YARN介绍

概述

简介

  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会清理任务状态,所以这种方式不利于任务的回溯,因此一般会配置历史服务器用于存储执行日志。

  • 15
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值