YARN上的应用程序主要分为短应用程序(MapReduce)和长应用程序(Storm)
通常而言,编写一个YARN Appcalition会涉及3个RPC协议:
- ApplicationClientProtocol
- ApplicationMasterProtocol
- ContainerManagementProtocol
客户端编写流程
步骤一 Client通过RPC函数ApplicationClientProtocol#getNewApplication从ResourceManager中获取唯一的application ID
步骤二 Client通过RPC函数ApplicationClientProtocol#submitApplication将ApplicationMaster提交到ResourceManager上
客户端编程库(Yarnclient)
ApplicationMaster设计
AM需要与RM和NM两个服务交互
通过与RM交互,AM可获得任务计算所需的资源
通过与NM交互,AM可启动计算任务(container),并监控直到运行完成
AM-RM编写流程
- AM通过RPC函数ApplicationMasterProtocol#registerApplicationMaster向ResourceManager注册
一旦ApplicationMaster注册成功,RM会为它返回一个RegisterApplicationMasterResponse类型的返回值,该对象包含应用程序可申请的最大资源量、应用程序访问控制列表等信息 - ApplicationMaster通过RPC函数ApplicationMasterProtocol#allocate向RM申请资源(以container形式表示)
- Application通过RPC函数ApplicationMasterProtocol#finishApplicationMaster告诉Res应用程序执行完毕,并退出。
ApplicationMaster将重复步骤2,不断为应用程序申请资源,知道资源得到满足或者整个应用程序运行完成。
AM-NM编写流程
- ApplicationMaster将申请到的资源二次分配给内部的任务,并通过RPC函数ContainerManagementProtocol#startContainer与对应的NM通信以启动Container(包含任务描述,资源描述等信息),该函数的参数类型为StartContainerRequest,主要包含一个类型为StartContainerRequest的字段
- 为了实时掌握各个Container运行状态,AM可通过RPC函数ContainerManagementProtocol#getContainerStatus向NM询问Container运行状态,一旦发现某个Container运行失败,ApplicationMaster可尝试重新为对应的任务申请资源
- 一旦一个Container运行失败后,AM可通过RPC函数ContainerManagementProcotol#stopContainer释放Container。
ApplicationMaster编程库
- AM-RM编程库
- AM-NM编程库