黑马程序员技术交流社区

标题: 【上海校区】YARN-SLS AM,RM协议解析 [打印本页]

作者: 梦缠绕的时候    时间: 2018-7-17 09:53
标题: 【上海校区】YARN-SLS AM,RM协议解析

AM向RM提交app:

submitapp:


final SubmitApplicationRequest subAppRequest中的subAppRequest就是传递给

getClientRMService().submitApplication(subAppRequest)的最终标准格式。


注意这个:

ApplicationSubmissionContext appSubContext

这就是ApplicationSubmissionContext协议类的对象。

该类在hadoop-yarn-api/src/main/proto/yarn_protos.proto中实现:


而在submitapp函数中,对appSubContext对象也初始化了:


初始化好后,通过setApplicationSubmissionContext(appSubContext)传递给subAppRequest,然后调用:

rm.getClientRMService().submitApplication(subAppRequest);方法传递给RM。




AM向RM请求资源:

在middleStep中的MRAMSimulator.java的sendContainerRequest中调用的packageRequests方法,该方法就是将请求打包成ResourceRequest协议格式的:

首先创建request:

然后开始对协议内容进行填充:比如添加rackname,numcontainer等


ResourceRequest格式的协议如下:


该类在hadoop-yarn-api/src/main/proto/yarn_protos.proto中实现:


然后回到sendContainerRequest函数:

ask = packageRequests(mergeLists(pendingMaps, scheduledMaps),
            PRIORITY_MAP);

ask就是List<ResourceRequest> 格式。sendContainerRequest接着往下走:

可以看到,通过createAllocateRequest(ask)函数将ask(List<ResourceRequest> )转换为request(AllocateRequest)。

ask被最终包装成AllocateRequest类型的request,AllocateRequest就是AM向RM申请资源最终的格式。在真正的YARN中,AM与RM通信也是AllocateRequest格式。

这就是RM与AM获取资源通信的协议。包括container的个数等。








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2