Yarn概述

  1. 产生原因:
    a. 内因:Hadoop1.0中,JobTracker既要负责任务调度和监控还要负责集群的资源管理,任务比较多,就导致任务量增多的时候效率成倍下降甚至崩溃、
    b. 外因:随着Hadoop以及分布式的发展,产生了越来越多的计算框架,这些框架之间的资源分配容易产生冲突,所以需要提供一套统一的资源分配的框架
  2. YARN - Yet Another Resource Negotiator— 迄今另一个资源调度器
  3. Yarn负责资源管理和任务调度
    a. ResourceManager:资源管理
    b. ApplicationMaster:任务管理
    c. NodeManager:执行任务

二、Job的执行流程

  1. 客户端将Job提交给ResourceManager
  2. ResourceManager在收到Job任务之后会等待NodeManager的心跳
  3. 在ResourceManager收到NodeManager的心跳之后会将Job交给这个NodeManager,同时在这个NodeManager上开启一个ApplicationMaster,将Job分配给这个ApplicationMaster - 在Yarn中,每一个Job任务会对应一个单独的ApplicationMaster
  4. ApplicationMaster收到Job之后会对这个Job进行划分,划分好之后会向ResourceManager请求执行资源。请求的资源数量要考虑副本数量。例如,如果一个任务划分成5个MapTask以及2个ReduceTask,那么默认情况下在申请资源的时候会申请17份资源,但是注意ResourceManager会只返回7份资源
  5. ResourceManager收到请求之后会将资源封装成Container对象发送给ApplicationMaster
  6. ApplicationMaster收到Container之后会对资源进行二次分配,分配给具体的子任务
  7. ApplicationMaster会将子任务分发给NodeManager执行,并且会监控这些任务的执行情况。每一个ApplicationMaster只监控自己的任务,不监控其他的ApplicationMaster的任务
  8. 当子任务执行失败的时候,这个子任务所占用的资源也会被释放。ApplicationMaster在监控到这个任务失败的时候会试图重启这个子任务,在重启之前,ApplicationMaster会向ResourceManager重新为这个子任务来申请资源
  9. 注意:
    a. 在Yarn体系结构中,ResourceManager管理ApplicationMaster,ApplicationMaster管理子任务
    b. 默认情况下,每份资源中包含1G内存一个1个CPU核,即允许每一个子任务占用1G内存以及1个CPU核

在这里插入图片描述