Hadoop的rpc机制分析

本文深入探讨了Hadoop RPC使用Java动态代理与反射实现对象调用方式的技术细节,包括客户端到服务器数据的序列化与反序列化过程。详细解释了RPC通信结构,重点介绍了RPC server端的实体模型,包括Listener、Reader、Handler和Responder等关键组件的职责与交互流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hadoop RPC使用Java动态代理与反射实现对象调用方式,客户端到服务器数据的序列化与反序列化由Hadoop框架或用户自己来实现,即实现数据组装可定制化。Hadoop的rpc通信结构如下图所示:

 

 

远程的对象拥有固定的接口,对caller也是可见的,真正的实现(Object)只在服务端。用户如果想使用那个实现的话,调用过程如此:先根据那个接口动态代理生成一个代理对象,调用这个代理对象的时候,用户的调用请求被RPC捕捉到,然后包装成调用请求,序列化成数据流发送到服务端;服务端从数据流中解析出调用请求,然后根据用户所希望调用的接口,调用接口真正的实现对象,再把调用结果返回给客户端,底层调用关系如下图所示。

 

RPC server端的实体模型如下图所示。



     
 

Listener

      监听RPC server的端口,如果客户端有连接请求到达,它就接受连接,然后把连接转发到某个Reader,让Reader去读取那个连接的数据。如果有多个Reader的话,当有新连接过来时,就在这些Reader间顺序分发。这里需要提到的是,Hadoop0.21版本在支持多Reader时有个bug(JIRA),如果有Reader在server运行期没被使用,Server进程不能正常关闭 

Reader 

      Reader的职责就是从某个客户端连接中读取数据流,然后把它转化成调用对象(Call),然后放到调用队列(call queue)里

Handler 

      真正做事的实体。它从调用队列中获取调用信息,然后反射调用真正的对象,得到结果,然后再把此次调用放到响应队列(response queue)里

Responder 

      它不断地检查响应队列中是否有调用信息,如果有的话,就把调用的结果返回给客户端。整个调用流程中与网络有关的地方都是用NIO来处理的。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值