Hadoop 2.7.1-Yarn 源码分析(二) Client 连接 ResourceManager

YARNRunner 被调度开始:
Hadoop 2.7.1-Yarn 源码分析(二) Client 连接 ResourceManager
传入了一个 ResourceMgrDelegate,这个类负责与 ResourceManager 沟通:
Hadoop 2.7.1-Yarn 源码分析(二) Client 连接 ResourceManager
首先看 createYarnClient 方法:
Hadoop 2.7.1-Yarn 源码分析(二) Client 连接 ResourceManager
返回的是一个 YarnClientImpl 实例
接下来看 init() 方法:
Hadoop 2.7.1-Yarn 源码分析(二) Client 连接 ResourceManager
我们可以看到 ResourceMgrDelegateAbstractService 的实现类:
Hadoop 2.7.1-Yarn 源码分析(二) Client 连接 ResourceManager
这个 serviceInit(config) 最终在 ResourceMgrDelegate 中:
Hadoop 2.7.1-Yarn 源码分析(二) Client 连接 ResourceManager
这里的 client.init(conf) 相当于 YarnClientImpl.init(conf), 至于为什么执行的是 YarnClientImpl.serviceInit(conf) ,这个你自己捋一捋,如下代码,主要是一些代码的初始化:
Hadoop 2.7.1-Yarn 源码分析(二) Client 连接 ResourceManager
最后执行父类的 serviceInit,这里的父类就是 AbstractServiceHadoop 2.7.1-Yarn 源码分析(二) Client 连接 ResourceManager
Hadoop 2.7.1-Yarn 源码分析(二) Client 连接 ResourceManager
接下来是 ResourceMgrDelegate#start()
Hadoop 2.7.1-Yarn 源码分析(二) Client 连接 ResourceManager
Hadoop 2.7.1-Yarn 源码分析(二) Client 连接 ResourceManager
这里的 client.start() 相当于 YarnClientImpl.start():
Hadoop 2.7.1-Yarn 源码分析(二) Client 连接 ResourceManager
其中,ApplicationClientProtocol:

  • 客户端通过该协议向 ResourceManager 提交应用程序、控制应用程序(如杀死 job)以及查询应用程序的运行状态等。在该 RPC 协议中应用程序客户端充当 RPC client 角色,ResourceManager 充当 RPC server 角色。

Hadoop 2.7.1-Yarn 源码分析(二) Client 连接 ResourceManager