大数据开发:Hadoop的RPC原理解析

Hadoop作为大数据生态的第一代处理框架,其经典性和代表性是毋庸置疑的,而在大数据学习当中,Hadoop这一块也依然是重点。Hadoop框架涉及到诸多知识点,需要一一去搞定。今天的大数据开发分享,我们就主要来讲讲Hadoop的RPC原理解析。

在Hadoop中,客户端与namenode、datanode与namenode、dfsadmin与namenode、客户端与resourcemanager等模块之间的交互都采用rpc的方式进行。

RPC客户端:

从模块分层的角度来看,RPC客户端通常可以分为如下几层:

image

最上层的客户端封装层:例如DFSClient,YarnClient,DFSAdmin等等,对外暴露接口调用,内部调用下层接口实现功能。

中间为协议转换层:不同的请求本质上是不同的协议。因此,有众多不同的协议实现类。在这些实现类中,主要负责对各自请求的结构体进行序列化与反序列化的操作。另外,每个协议实现类中,都会有一个代理(RPCProxy)的成员对象,请求通过调用代理的接口向下透传,最终向服务段发送请求并获取到响应内容。

代理层:也可以理解为是RPC引擎层,因为向上提供了通用的代理对象和处理类,向下调用通信层的接口向服务端发送请求。RPCEngine本身是一个接口,具体实现类为ProtobufRpcEngine和WritableRpcEngine,两个引擎中各自都包含了一个invoker类,实现了java动态代理框架中处理类的接口,在invoker内部,则封装了对RPCClient的操作。

网络通信层:RPC的网络通信,具体包括RPC连接(Hadoop中均采用tcp的方式)的建立,请求的发送与响应的接收。RPCClient内部维护了一个连接(Connection)列表,每个连接都是一个独立的线程,在线程内部负责正常请求的发送与响应的接收。

对于采用了高可用的模块而言,例如namenode,resourcemanager,对应的客户端其整体结构,会在协议层与RPC引擎层之间再多加一层抽象,称为重试代理(RetryProxy)。

在该层,会进行请求失败的重试,因为向standby的节点发送请求,或者active的节点异常情况,均无法得到响应,因此需要进行重试。

同样,向上仍旧是通过java动态代理的方式返回代理对象,向下则调用对应引擎层的接口,获取代理对象,并调用对应的方法完成请求。

这样对于上层的客户端,则不需要感知下面的重试逻辑,完全是透明的处理逻辑。

从逻辑流程上来看,RPC请求会分为两个步骤:

获取代理对象

客户端的请求流程中,首先是获取一个接口协议的代理对象。该代理对象通常是由RPC引擎提供的,具体通过java的动态代理方式,返回代理对象。

通过代理对象发送请求

上面讲到了,代理对象是通过java动态代理的方式构建出来的,因此,所有的方法调用最终会调用到invoker的invoke方法中。在invoke方法中,根据不同的请求序列化成不同的请求头,同时对请求也进行序列化,然后通过RPC的Client将序列化的内容发送给服务端。最后从服务端收到请求的响应,反序列化后返回实际结果。

RPC服务端

服务端采用了reactor的设计,以多线程的方式负责RPC请求的处理。

请求处理线程从Call队列中取出RPC请求,并回调完成RPC请求处理后,会根据线程的繁忙程度,将响应数据放到队列中,由另外的线程从队列中取出响应结果发送给客户端,或者是直接进行数据的发送。

所谓空闲连接指的就是当前连接上没有任何RPC请求。

关于大数据开发,Hadoop的RPC原理解析,以上就为大家做了大致的介绍了。RPC原理是Hadoop当中需要理解的一个重要概念,进一步地理解可以去阅读相关源码。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农老K

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值