为什么会引入RPC:
RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。当我们讨论HDFS的,通信可能发生在:
- Client-NameNode之间,其中NameNode是服务器
- Client-DataNode之间,其中DataNode是服务器
- DataNode-NameNode之间,其中NameNode是服务器
- DataNode-DateNode之间,其中某一个DateNode是服务器,另一个是客户端
如果我们考虑Hadoop的Map/Reduce以后,这些系统间的通信就更复杂了。为了解决这些客户机/服务器之间的通信,Hadoop引入了一个RPC框架。
Hadoop的RPC的特点:
RPC是分布式计算中C/S模型的一个应用实例,对于Hadoop而言,他有以下几个特点:
- 透明性
- 高性能
- 可控性:
Hadoop的RPC的总体架构:
hadoop RPC主要分为四个部分:序列化层,函数调用层,网络传输层,服务端处理框架。
- 序列化层
- 序列化的主要作用是将结构化对象转换为字节流以便通过网络进行传输或者写入持久存储。在RPC框架中,它主要用于将用户请求中的参数或者应答转换成字节流以便跨机传输。
- 函数调用层
- 函数调用层主要功能是:定位要调用的函数,并执行该函数,Hadoop采用了java的反射机制和动态代理实现了函数的调用。
- 网络传输层
- 网络传输层描述了Client和Server之间消息的传输方式,Hadoop采用了基于TCP/IP的socket机制。
- 服务端处理框架
- 服务端处理框架可被抽象为网络I/O处理模型,她描述了客户端和服务器端信息交互的方式,她的设计直接决定了服务器端的并发处理能力。常见的网络I/O模型有阻塞式I/O,非阻塞式I/O、事件驱动式I/O等,而Hadoop采用了基于reactor设计模式的事件驱动I/O模型
HadoopRPC的使用方法:
HadoopRPC主要提供了两种接口
- public static <T> T getProxy/waitForProxy(Class<T> protocol,long clientVersion,InetSocketAddress addr, Configuration conf,SocketFactory factory) throws IOException;
用于构造客户端代理对象(该对象实现了某个协议),用于向服务器端发送RPC请求。
- public static <T> Server RPC.Builder(Configuration).build();
为某个协议(java接口)实例构造服务器对象,用于客户端处理发送的请求。
通常,使用Hadoop 的RPC 可分为一下4个步骤:
- 定义RPC协议
- 实现RPC协议
- 构造并启动RPC Server
- 构造RPC Client 并发发送RPC请求
经过以上四部,我们便利用了Hadoop搭建了一个非常高效的c/s网络模型。
Hadoop RPC类详解:
Hadoop RPC主要由三大类组成,即RPC、Client、和Server ,分别对应对外编程接口、客户端实现和服务器端实现。
- ipc.RPC类分析。
主要类图:
- ipc.Client类分析。
发送远程过程调用信息并接收执行结果。
- ipc.Server类分析。