1.YARN的基础理论

1)关于YARN的介绍:

   YARN 是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而 MapReduce 等运算程序则相当于运行于操作系统之上的应用程序。

2)hadoop1.x中YARN的不足:

   - JobTracker是集群的事务的集中处理,存在单点故障
   - JobTracker需要完成得任务太多,既要维护job的状态又要维护job的task的状态,造成资源消耗过多
   - 在 TaskTracker 端,用Map/Reduce Task作为资源的表示过于简单,没有考虑到CPU。内存,等资源情况,将两个需要大消耗量的Task调度到一起,很容易出现OOM。
   - 把资源强制划分为 Map/Reduce Slot,当只有 MapTask 时,TeduceSlot 不能用;当只有 ReduceTask 时,MapSlot 不能用,容易造成资源利用不足。

3)hadoop2.x中YARN的新特性:

  MRv2 最基本的想法是将原 JobTracker 主要的资源管理和 Job 调度/监视功能分开作为两个单独的守护进程。有一个全局的ResourceManager(RM)和每个 Application 有一个ApplicationMaster(AM),Application 相当于 MapReduce Job 或者 DAG jobs。ResourceManager和 NodeManager(NM)组成了基本的数据计算框架。ResourceManager 协调集群的资源利用,任何 Client 或者运行着的 applicatitonMaster 想要运行 Job 或者 Task 都得向 RM 申请一定的资源。ApplicatonMaster 是一个框架特殊的库,对于 MapReduce 框架而言有它自己的 AM 实现,
用户也可以实现自己的 AM,在运行的时候,AM 会与 NM 一起来启动和监视 Tasks。

4)YARN中的角色介绍:

ResourceManager:ResoueceMananer是基于应用程序对集群资源的需求进行调度的yarn集群的主控制节点,负责协调和管理整个集群,相应用户提交的不同的类型的应用程序,解析、调度、监控等工作。ResourceManager会为每一个application启动一个MRappmaster,并且MRappmaster分散在各个nodemanager上。
ResourceManager只要有两个部分组成:
  - 应用程序管理器(ApplicationsManager, ASM): 管理和监控所有的应用程序的MRappmaster,启动应用程序的MRappmaster,以及MRappmaster失败重启
  - 调度器(Scheduler):底层是一个队列,负责应用程序的执行时间和顺序
     - FIFO(先进先出的队列):先提交的任务先执行 后提交的后执行 内部只维护一个队列
     - Fair 公平调度器:所有的计算任务进行资源的平分,全局中如果只有一个job那么当前的job占用所有的资源
     - Capacity(计算能力调度器):可以根据实际的job任务的大小,进行资源的配置


NodeManager:Nodemanager是yarn集群中正真资源的提供者,也是真正执行应用程序的容器的提供者,监控应用程序的资源情况(cpu、网络、IO、内存)。并通过心跳向集群的主节点ResourceManager 进行汇报以及更新自己的健康状况。同时也会监督container的生命周期管理,监控每个container的资源情况


MRAppMaster:为当前的job的mapTask和reduceTask向ResourceManager 申请资源、监控当前job的mapTask和reduceTask的运行状况和进度、为失败的MapTask和reduceTask重启、负责对mapTask和reduceTask的资源回收。


Container :Container 是一个容器,一个抽象的逻辑资源单位。容器是由ResourceManager Scheduler 服务动态分配的资源构成的,它包括该节点上的一定量的cpu、网络、IO、内存,MapReduce 程序的所有 Task 都是在一个容器里执行完成的。

5)YARN中的资源调度:

hadoop 1.x
Yarn的基础介绍以及job的提交流程

  • 首先通过client发起计算作业,由jobTracker向每一个Task Tracker发起计算(每一个job Tracker就是一个map-reduce)
  • 具体工作的是Task Tracker,而jobTracker是做资源管理的,首先Task Tracker会向job tracker做心跳,并同时的拉取相应的任务,开始计算。
  • 首先job Tracker控制Task Tracker并行map计算,当map结束之后,job Tracker控制Task Tracker并行reduce计算。
    hadoop 2.x
    Yarn的基础介绍以及job的提交流程
  • 客户端提交计算任务到resourceManager(hadoopxx.jar)
  • resourceManager会在一个节点上启动一个container,在其中运行一个MRappmaster
  • MRappmaster向resourceManager申请资源运行行maptask和reducetask
  • resourceManager向MRAPPmaster返回运行maptask和reducetask的节点
  • MRAPPmaster到相应的节点中启动一个container在其中运行maptask和reudcetask
  • MRappmaster监控maptask或者reducetask的运行状况
  • nodemanger在运行完maptask或者reducetask后,向MRappmaster申请注销自己,释放资源
  • MRappmaster向resourcemanager注销自己,释放资源。

    2.YARN的job 提交流程

    Yarn的基础介绍以及job的提交流程

    1. 客户端向resourcemanager提交job运行的请求(hadoop jar xxxx.jar)
    2. Resourcemanager进行检查,没有问题的时候,向客户端返回一个共享资源路径以及JobID
    3. 客户端将共享资源放入共享路径下:(/tmp/hadoop-yarn/staging/hadoop/.staging/job_1539740094604_0002/)
      1. Job.jar 需要运行的jar包,重命名为job.jar
      2. Job.split 切片信息 (FlieInputFormat---getSplits List<Split>)
      3. Job.xml 配置文件信息 (一些列的job.setxxxx())
    4. 客户端向resourcemanager反馈共享资源放置完毕,进行job的真正提交
    5. resourceManager为这个job分配一个节点并在这个节点上启动MRAPPmaster任务
    6. resourceManager到对应的节点上去启动一个container然后启动mrappmaster
    7. MRappmaster去共享资源路径中下载资源(主要是split、job)
    8. MRappmater对job进行初始化,生成一个job工作簿,job的工作薄记录着maptask和reduce的运行进度和状态
    9. MRappmaster向resourcemanager申请maptask和reducetask的运行的资源,先发maptask然后发reducetask
    10. resourcemanager向MRAPPmaster返回maptask和reduce的资源节点(返回节点时,有就近原则,优先返回当前的maptask所处理切片的实际节点,数据处处理的时候可以做到数据的本地化处理。如果是多副本的时候就在多副本的任意节点。而reducetask任务在任意不忙的节点上启动)
    11. MRAPPmaster到对应的节点上启动一个container,然后在container中启动maptask任务
    12. maptask任务到对应的共享资源路径下下载相应的资源(运行的jar包)
    13. maptask任务启动,并且定时向MRAPPmaster汇报自己的运行状态和进度
    14. 当有一个maptask任务完成之后,reduce就启动container然后在启动启动reduce任务,但是这里的reducetask只做数据拉取的工作,不会进行计算
    15. duceTask任务到对应的共享资源路径下载相应的资源(运行的jar包),当所有的maptask任务运行完成后,启动reduce任务进行计算
    16. 当maptask或者是reducetask任务运行完成之后,就会向MRAPPmaster申请注销自己,释放资源
    17. 当application任务完成之后,MRAPPmaster会向resourcemanager申请注销自己,释放资源