Hadoop RPC主要由三大部分组成:Client、Server和RPC,如下表所示。
内部类 |
功能 |
Client |
连接服务器、传递函数名和相应的参数、等待结果 |
Server |
主要接受Client的请求、执行相应的函数、返回结果 |
RPC |
外部编程接口,主要是为通信的服务方提供代理 |
这三部分在Hadoop RPC架构中的位置如下图所示:
本文主要解析Client类。Client类主要包含了以下几个内部类
内部类 |
功能 |
Call |
封装Invocation对象,作为VO写到服务端,也存储从服务端返回的数据 |
Connection |
处理远程连接对象,继承了Thread |
ConnectionID |
唯一确定一个连接 |
Call内部类:它封装了一个RPC请求,它包含了五个成员变量:唯一标识id、函数调用信息param、函数执行返回值value、出错或异常信息error和执行完成标识符done。由于HadoopRPC Server采用了异步方式处理客户端请求,因此远程过程调用的发生顺序与结果返回顺序无直接关系,而Client端正是通过id识别不同的函数调用。当客户端向服务器端发送请求时,只需填充id和param两个变量,剩下三个变量由服务器端根据函数执行情况填充。
Connection内部类:Client与每个Server之间维护的一个通信连接。该连接相关的基本信息及操作被封装到了Connection中。其中基本信息主要包括:通信连接唯一标识remoteId,与Server端通信的Socket socket,网络输入数据流in,网络输出数据流out,保存RPC请求的哈希表calls。ConnectionID内部类:该类封装了address、ticket、protocol,用来唯一标志一个从客户端到服务器的连接
Client类主要用来发送远程过程调用信息并接受执行结果。它涉及的类关系图下图3-9所示