ApplicationMaster,ResourceManager和NodeManager通信过程

ApplicationMaster与ResourceManager和NodeManager的交互:
      rpc交互: 1.与ResourceManager交互,ApplicationMaster可获得计算所需的资源
               2.与NodeManager交互,ApplicationMaster可启动计算任务并监控它的生命周期

1.ApplicationMaster与ResourceManager之间通信主要有以下三个步骤
      1).ApplicationMaster通过rpc向ResourceManager注册。ApplicationMaster启动时,首先向ResourceManager注册,注册消息封装到
         ProtocolBuffers消息RegisterApplicationMasterRequest中,主要包含以下字段:
             **host: ApplicationMaster启动所在的节点的host
             **rpc_port: ApplicationMaster本次启动对外rpc的端口号
             **tracking_url: ApplicationMaster对外提供的追踪的web url,用户可以通过该url查看应用程序执行状态
        ApplicationMaster注册成功后,ResourceManager将返回一个RegisterApplicationMasterResponse类型的对象。该返回
        对象主要包含以下几个字段:
             **maximumCapability: 最大可申请的单个Container的占用的资源量
             **application_ACLs: 应用程序访问控制列表
     2).注册成功后,ApplicationMaster通过rpc向ResourceManager申请资源(资源以Container为单位),rpc请求中主要包含以下几个字段:
             **ask: AppliationMaster请求的资源列表,每个请求资源可以用ResourceRequest表示。ResourceRequest包含以下几个主要字段:
                 ***priority: 资源优先级,为正整数,值越小,优先级越高,分配的资源的优先级也就越高
                 ***resouce_name: 期望资源所在的节点,如果是*,表示任何机器上的资源都可以
                 ***capability: 所需的资源量,支持cpu和内存两种资源
                 ***num_container: 满足以上要求的资源数目
             **release: ApplicationMaster释放的资源列表
       ResourceManager接受请求后,将返回以下一个AllocateResponse类型的对象,该对象主要包含以下字段:
             **a_m_command:AppliactionMaster需要执行的命令。主要有两个取值:AM_RESYNC表示重启,AM_SHUTDOWN表示关闭。
                            当ResourceManager重启或者应用程序信息出现不一致的状态时,可能要求AppliactionMaster重启
                            当处于黑名单时,则要求ApplicationMaster关闭
             **allocated_container: 分配给应用程序的Container列表(Container在mr中相当于task,在spark中相当于executor)
     3)应用程序执行完毕后,ApplicationMaster将通过rpc告诉ResoureManager程序执行完毕并退出


2,ApplicationMaster和NodeManager之间的通信主要也有以下的三个步骤:
     1)ApplicationMaster将申请到的资源进行二次分配,通过rpc函数与对应的NodeManager(不一定和ApplicationMater在同一节点上)通信,以启动
       Container(包含任务描述和资源描述等信息),rpc函数中的参数类型为StartContainersRequest,该类型参数本身含有两个以下两个字段:
           *container_launch_context:封装了Container的执行环境,主要包含以下几个字段:
               **localResources: Container执行所需的本地资源,比如字典文件,jar包或者可执行文件,以key-value格式保存
               **environment: Container执行所需的环境变量
               ----------------------------------------
           *container_token: Container启动时的安全令牌
       函数执行成功后,NodeManager会返回一个StartContainerResponse类型的对象,该对象主要包含以下几个字段:
           *services_meta_data: 返回的元数据信息
           *successed_requests: 成功运行的Container列表
           *failed_requests: 运行失败的Container列表
     2)Container成功启动后,ApplicationMaster通过rpc向NodeManager询问Container运行状态,一旦任务失败,ApplicationMaster会尝试
       重新为任务向ResouceManager申请资源
     3)一旦一个Container运行完成后,ApplcationMaster会通过rpc函数释放Container

根据上面描述作图如下:

      


现在我们可以总结出它们三个组件间的关系:当向yarn提交了一个任务时,ResourceManager会与对应的NodeManager通信,尝试启动一个ApplicationMaster,在ApplicationMaster成功启动后,将向ResouceManager注册自身,注册信息主要包括自己所在节点的host,rpc端口号和用于外部追踪应用执行程度的weburl,ResouceManager接收到该rpc注册函数后,将返回一个RegisterApplicationMasterResponse类型的对象,主要包含可以申请最大的单个Container所占的资源量。
注册成功后,ApplicationMaster会向ResourceManager申请Cotainer(s)资源,ResourceManager接收到该请求后,将会返回一个AllocateResponse对象,
该对象包含希望ApplicationMaster执行的命令和分配给应用程序的资源列表,也就是Container列表。当ApplicationMaster得到该资源列表后,将通过rpc
与NodeManager通信以启动Container,Container启动成后,AppicationMaster会周期性地通过rpc向NodeManager询问Container的运行状态
如果此时Container执行失败,ApplicationMaster会重新和ResourceManager通信申请新的资源。如果Container执行成功后,ApplicationMaster
将会通过rpc函数释放Container。该应用程序对应的所有Container都执行成功后,ApplicationMaster将通过rpc告诉ResoureManager程序执行完毕并退出

猜你喜欢

转载自blog.csdn.net/summermangozz/article/details/72621303