依赖于Hadoop Writable类型的支持。Hadoop Writable接口要求每个实现类都得确保将本类的对象正确序列化(writeObject)与反序列化(readObject)。因此,Hadoop RPC使用Java动态代理与反射实现对象调用方式,客户端到服务器数据的序列化与反序列化由Hadoop框架或用户自己来实现,也就是数据组装是定制的。
Hadoop IPC在org.apache.hadoop.ipc
- RemoteException:远程异常,表示远程调用过程中的错误。
- Status:枚举类,包括 SUCCESS (0) 成功, ERROR (1)一般错误, FATAL (-1)致命错误;三种状态
- VersionedProtocol:Hadoop IPC的远程接口都需继承
- ConnectionHeader:建立连接时发送的消息头。
IPC的核心类在Client,Server,RPC中,
Connection:
IPC连接时IPC Client和Server关系的一个抽象,Client调用Server上方法前,会创建Connection。同样server也存在Connection。Client.Connection和Server.Connection,各自提供了客户端和服务端管理连接需要的信息和方法。Hadoop的远程过程调用使用TCP协议通信,IPC建立在TCP连接之上。
(1)ConnectionId
通过ConnectionId来区分不同链接
address:远程放服务器的地址。
ticket:包含了用户和用户组的信息
protocol:报错的是IPC接口对应的类对象。
在上述三个成员变量相等的情况,ConnectionId相等。
(2)ConnectionHeader
是客户端和服务器间TCP链接建立后交换的第一条消息,内容包括ConnectionId的用户信息和IPC接口信息。
Call
在客户端和服务器建立连接以后,通过Call进行远程调用,客户端和服务端分别定义了远程调用类Call,Client.Call和Server.Call。
Client还定义了ParallelCall,用于并行处理。
Client.Call是有IPC客户端接口实例上的方法调用产生的
可以说Hadoop RPC=动态代理+定制二进制流