首页 > 代码库 > RPC与Hadoop RPC机制

RPC与Hadoop RPC机制

一、什么是RPC?

(1)Remote Procdure call ,远程方法调用,它允许一台计算机程序远程调用另外一台计算机的子程序,而不用去关心底层的网络通信细节,对我们来说是透明的。经常用于分布式网络通信中。

(2)Hadoop的进程间交互都死通过RPC来进行的,比如Namenode与Datanode直接,Jobtracker与Tasktracker之间等。

 

流程:

(1)RPC采用了C/S的模式;

(2)Client端发送一个带有参数的请求信息到Server;

(3)Server接收到这个请求以后,根据发送过来的参数调用相应的程序,然后把自己计算好的结果发送给Client端;

 

(4)Client端接收到结果后继续运行;

 

RPC特点

(1)透明性:远程调用其他机器上的程序,对用户来说就像是调用本地方法一样;

(2)高性能:RPC server能够并发处理多个来自Client的请求;

 

(3)可控性:jdk中已经提供了一个RPC框架——RMI,但是该PRC框架过于重量级并且可控之处比较少,所以Hadoop RPC实现了自定义的PRC框架。

 

二、Hadoop的RPC机制

(1)序列化层:Clent与Server端通信传递的信息采用了Hadoop里提供的序列化类或自定义的Writable类型;

(2)函数调用层:Hadoop RPC通过动态代理以及java反射实现函数调用;

(3)网络传输层:Hadoop RPC采用了基于TCP/IP的socket机制;

(4)服务器端框架层:RPC Server利用java NIO以及采用了事件驱动的I/O模型,提高RPC Server的并发处理能力;

 

技术分享

Hadoop RPC设计技术

(1)动态代理

(2)反射——动态加载类

(3)序列化

(4)非阻塞的异步IO(NIO)

 

 

java动态代理

相关类与接口:

1.java.lang.reflect.Proxy

2.java.lang.reflect.InvocationHandler

动态代理创建对象过程:

1.InvocationHandler handler = new InvocationHandlerImpl();

2.Proxy.newProxyInstance();

 

(1)动态代理可以提供对另一个对象的访问,同时隐藏实际对象的具体事实,代理对象对客户隐藏了实际对象。

(2)动态代理可以对请求进行其他的一些出来,在不允许直接访问某些类,或需要对访问做一些特殊处理等,这时候可以考虑使用代理。

 

(3)目前Java开发包中提供了对动态代理的支持,但现在只支持对接口的实现。

 

RPC与Hadoop RPC机制