您的位置:首页 > 移动开发

ApplicationMaster,ResourceManager和NodeManager通信过程

2017-05-22 09:39 288 查看
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程序执行完毕并退出
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  yarn hadoop