从 YARNRunner 被调度开始:
传入了一个 ResourceMgrDelegate,这个类负责与 ResourceManager 沟通:
首先看 createYarnClient 方法:
返回的是一个 YarnClientImpl 实例
接下来看 init() 方法:
我们可以看到 ResourceMgrDelegate 是 AbstractService 的实现类:
这个 serviceInit(config) 最终在 ResourceMgrDelegate 中:
这里的 client.init(conf) 相当于 YarnClientImpl.init(conf), 至于为什么执行的是 YarnClientImpl.serviceInit(conf) ,这个你自己捋一捋,如下代码,主要是一些代码的初始化:
最后执行父类的 serviceInit,这里的父类就是 AbstractService :
接下来是 ResourceMgrDelegate#start():
这里的 client.start() 相当于 YarnClientImpl.start():
其中,ApplicationClientProtocol:
- 客户端通过该协议向
ResourceManager提交应用程序、控制应用程序(如杀死job)以及查询应用程序的运行状态等。在该RPC协议中应用程序客户端充当RPC client角色,ResourceManager充当RPC server角色。