Hadoop-YARN架构技术

YARN产生的背景:
     1)MapReduce1.x:单点故障,节点压力大不易扩展   ,只能运行mapreduce框架。

     

2)集群集成复杂,资源利用率很低(各集群资源不能共享,各集群数据要相互移动)

    

于是催生了YARN(各个集群的资源管理调度框架):支持不同的计算框架共享一个HDFS集群的数据,享受整体的资源调度,提高了集群资源利用率。

YARN概述:

    Yet Another Resource Negotiator

    通用的资源管理系统

     为上层应用提供统一的资源管理和调度

YARN的架构:

  

     1)ResourceManager(RM):

               整个集群同一时间提供服务的RM只有一个,负责集群资源的统一管理和调度处理客户端的请求:

               提交一个作业,杀死一个作业

               监控NodeManager,一旦某个NM挂了,那么该NM上运行的任务就会告诉各自任务

               的AM该如何处理。              

                Resourcemanager中有两个主要组件:Scheduler和 ApplicationsManager
                               ApplicationsMaster:检测状态和从调度中获取资源。
                               Scheduler:负责分配资源给正在运行的应用程序。

     2)NodeManager(NM):

                集群中有很多,负责自己本身节点资源管理和使用,定时向RM汇报本节点的资源使用情况

                接受并处理来自RM的各种命令:启动Container等。

                 处理来自AM的命令

                单个自己节点的管理

     3)ApplicationMaster(AM):

               每个应用程序(MR,Spark等)对应一个AM,负责应用程序的管理。为应用程序向

               RM申请资源(core,memory等),再分配给内部的task。

               需要与NM通信:启动或停止task。task运行在container里面,AM也是运行在里面

              (客户端提交一个任务被集群作为一个应用程序,一个应用程序会通过RM在某个NM上

                创建一个AM,但是该应用程序会被分解为很多task,分布在不同的NM上)

     4)Container:

              封装了CPU,Memory等资源的一个容器,是一个任务运行环境的抽象

     5)Client:

            提交任务作业,查看作业进度,杀死作业

YARN执行流程:

     

大致流程:

(1) Client向 Resourcemanager提交任务。
(2) Reourcemanager分配创建 Container任务并告知 Nodemanage启动进程 MRAppMastere
(3) NodeManager接收指定任务并开辟空间启动 MRAppMaster
  (4)    Nodemanager完成任务之后会及时汇报给 Resourcemanager

(5) Mrappmaster 和 Resourcemanager 交互,获取运行任务所需要的资源
(6) MRAppmaster获取资源后和 Nodemanager进行通信,启动 MapTask或Reducetask进程
(7)任务正常运行、定时向 Mrappmaster汇报工作情况。

详细流程:

   1) Client提交ー个Job到 ResourceManager,进入ResourceManager中的Scheduler队列等待调度。
   2) ResourceManager根据 NodeManager汇报的资源情况( NodeManager会定时汇报资源和Container使用情况,

          请求一个合适的 NodeManager启动Container,并在该Container中启动运行 Applicalionmaster.
   3) ApplicationMaster启动后,住册到 ResourceManager上,以使Client可以查询到ApplicationMaster的信息,

         便于Client直接和 ApplicationMaster通信。
   4) ApplicationMaster根据Job划分的Task状况,向 ResurceManager协商申请Container资源。

   5) ResourceManager分配给 ApplicationMaster  Container资源后, ApplicationMaster根据 Container内描述

         的资源信息,向对应的 NodeManager请求启动 Container,
   6) NodeManager启动 Container并运行Task,各个Task在运行过程中向 ApplicationMaster汇报进度状态信息,

          同时 NodeManager也会定时向 ResourceManager汇报Container的使用情况。
   7)在Job执行过程中, Client可以和 ApplicationMaster通信,获取 Application相关的进度和状态信息。
   8)在Job完成后, ApplicationMaster通知 ResourceManager清除自己的相关信息,并释放 Container资源。

猜你喜欢

转载自blog.csdn.net/qq_25948717/article/details/82424154