Hadoop 之 Yarn

Yarn的架构

  1. ResourceManager:是yarn的老大,主要负责整个yarn的资源调度与分配。

    • 处理客户端的任务请求。
    • 监控NodeManager。
    • 启动或监控ApplicationMaster。
    • 负责资源的分配与调度。
  2. NodeManager:是单个节点的管理者,主要负责单个节点上的资源并向ResourceManager汇报。

    • 管理单个节点上的资源。
    • 处理来自ResourceManager的命令。
    • 处理来自ApplicationMaster的命令。
  3. ApplicationMaster:是MapReduce的管理者,负责资源的申请。

    • 为应用程序申请资源并分配内部任务。
    • 负责任务的监控与容错。
    说明:
    • 如果某个NodeManager存在问题,导致节点挂掉,AppMaster会重新向ResourceManager申请节点资源资源。
    • 如果某个节点的Container损坏,AppMaster也会重新向ResourceManager申请资源,ResourceManager分配一个除当前损坏节点外的空闲节点。
    • 若AppMaster所在的节点损坏,会导致整个MapReduce任务失败。
  4. Container:类似与一个容器。

    • Container是yarn资源的抽象,封装了某个节点的多维度资源。

Yarn上Job的提交流程

  1. 客户端通过调用 waitForCompletion()方法向整个集群提交 MapReduce 任务。

  2. 然后客户端先向 ResourceManager申请一个Application。

  3. ResourceManager 收到来自客户端的 Application请求后会向客户端返回一个资源提交的临时路径以及Application_id。

  4. 客户端开始提交任务,并根据 ResourceManage返回的资源提交临时路径去提交任务运行所需要的一些必要资源。

  5. 资源提交完毕后向 ResourceManager 申请运行 AppMaster。

  6. ResourceManager 将客户端提交的任务初始化为一个Task,并将其放入容量调度器队列中等待。

  7. 当某个空闲节点NodeManager领取到该Task任务后,会创建一个Container,并启动AppMaster,然后Container会从HDFS中存放运行Job资源的路径中下载JOb资源到本地,如Jar包,并根据切片数量计算出相应的 MapTask个数。

  8. 待所有资源准备就绪后,AppMaster 开始向 ResourceManager 申请相应的 MapTask容器。

  9. ResourceManager运行MapTask 任务并将其分配给其他 NodeManager节点。

  10. 领取到 ResourceManger分发的 MapTask 任务后开始创建 Container容器。

  11. AppMaster 开始向领取到 MapTask 任务的 NodeManager 发送程序启动脚本,收到该脚本的NodeManager分别启动MapTask,然后 MapTask 开始对数据进行分区排序,最后归并排序。

  12. AppMaster 待所有 MapTask 运行结束后开始向 ResourceManager 申请 Container 运行 ResourceTask,但通常情况下 AppMaster 不会等所有的 MapTask 任务运行结束后才开始申请资源,而是默认等到5%的MapTask 任务运行结束就开始向 ResourceManager 申请资源运行 ResourceTask。

  13. ResourcrTask 启动后开始向 MapTask 获取相应分区的数据,并进行归并排序最后分组。

  14. 所有任务运行结束后 MapReduce向ResourceManager 申请注销自己。

Yarn调度器

  1. FIFO 先进先出: 支持单队列 、先进先出 生产环境不会用。
  2. Capacity Scheduler 容量调度器:支持多队列,保证先进入的任务优先执行,支持抢占式。 Apache默认。
  3. Fair Sceduler 公平调度器:支持多队列,保证每个任务公平享有队列资源,支持抢占式。 CDH默认。
posted @ 2021-05-26 21:38  yuexiuping  阅读(92)  评论(0编辑  收藏  举报