Hadoop RPC

一、说明

    Hadoop无论是1.x还是2.x机器不同角色之间的通信全部是通过RPC完成的,RPC底层都是通过Dynamic Proxy完成,无外乎就是TCP连接,验证协议,提取字段等等。所不同的是1.x采用的是plain java自己完成序列化与反序列化,而2.x底层采用的是PB序列化与反序列化,造成了使用的不同。


二、Dynamic Proxy基本概念

    Dynamic Proxy是动态代理,采用的是反射技术,在运行时动态生成对象,要求代理类与实际执行类具有相同的接口,同时实现InvocationHandler接口,最后通过Proxy类生成代理类:

Proxy.newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)

参数第一个为ClassLoader,第二个为共同的interface,第三个是实现的handler方法。这样调用代理的相应方法会调用handler方法。

 

三、RPC in Hadoop 1.x

    Hadoop底层RPC通信采用Dynamic Proxy,这样隔离了不同身份的机器之间底层连接检验等细节,而专注于业务逻辑。

    下面是Hadoop 1.x RPC的一个简单流程,比如DFSClient想要与NameNode通信,建立RPC连接。

(一)Client端