Yarn的架构和概念--通过Yarn调度job的完整执行流程

Hadoop1.X版本中 通过JobTracker进行任务的调度和监控,以及集群资源的管理。TaskTracker用于在在节点上执行map reduce任务。
Yarn把JobTracker的任务分为两个部分:ResourceManger和ApplicationMaster分别进行资源额管理和任务的管理。使用NodeManager替代原来的TaskTracker,执行map reduce 任务。

Yarn总的来说包括三块:

  • ResourceManager
  • NodeManager
  • ApplicationMaster

1)ResourceManager

  • 位于Master Node上,不一定是在hadoop中的namenode
  • 职责:
    • 以最佳方式管理不同计算应用程序的资源调度
    • 在Master Node上和Scheduler 、ApplicationManager协作

Scheduler

  • 位于Master Node上,和ResourceManager运行在一起
  • 职责:
    • 对ResourceManager收到的每一个任务请求,调度一个任务执行
    • 对集群中提交的每一个应用分配资源
    • 同ApplicationMaster协作,监控运行的程序。

ApplicationManager

  • 位于Master Node上,和ResourceManager运行在一起
  • 职责:
    • 帮助Scheduler,监控运行的应用
    • 接收来自客户端的任务请求
    • 同slave node上的ApplicationMaster洽谈,分配container执行特定的task

2)NodeManager

  • 位于slave node上,和datanode一块
  • 职责:
    • 定期向ResourceManager发送心跳
    • 管理和执行container
    • 监控资源的使用情况(CPU、内存、IO),并且向resourceManager报告资源使用情况-

3)ApplicationMaster

  • 位于slave node上,和datanode一块
  • 是运行在nodemanager上的一个执行任务的特定程序
  • 每一个应用都会分配一个ApplicationMaster,这意味着多个应用会有多个ApplicationMaster
  • 职责:
    • 从ResourceManager申请合适的container到slave node上
    • 在slave node上和一个或者多个NodeManager协作监控任务的执行情况-

What is Container?
它被认为是nodemanager上的一个小的资源单元(cpu、io 、内存)
Scheduler通过ResourceManager分配资源给对应的任务,这些资源就是一个container。
ApplicationMaster通过Yarn集群上的不同节点上的其他Container管理着应用的执行。

下面通过一张图来看看Yarn的架构,并且会一步一步的讲解Job怎么通过yarn执行。
这里写图片描述

Step 1:
提交一个应用(可以是Mapreduce,spark etc)给ResourceManager
同时会在nodemanager上启动一个ApplicationManager

Step 2:
ApplicationManager验证任务之后递交给Scheduler进行资源的分配

Step 3:
Scheduler分配container给slave节点上的ApplicationMaster

Step 4:
NodeManager启动ApplicationMaster,使用Scheduler给他分配的container。所以ApplicationMaster被认为拥有任何应用的第一个container。

Step 5:
ApplicationMaster根据任务的data的位置,需要的cpu、内存、核数等向ResourceManager申请需要的container。

Step 6:
ResourceManager分配合适的资源(container)给slave node 并向ApplicationMaster发送slave node细节信息和其他信息。

Step 7:
之后,ApplicationMaster 向NodeManagers发送请求到相应的slave node 启动container。

Step 8:
ApplicationMaster之后会在job执行的时候管理请求的container的资源。以及当job 完成的时候通知ResourceManager。

Step 9:
NodeManagers会定期的向ResourceManager告知当前节点可用的资源情况,以便于Scheduler为其他的应用调度资源。

Step 10:
当slave node执行任务失败了,ResourceManager会分配container给其他的合适的node,因而ApplicationMaster可以使用新分配的container完成任务。

猜你喜欢

转载自blog.csdn.net/zhangshk_/article/details/78885360