16. Hadoop RPC 使用概述

下图给出了DFSClient调用ClientProtocol.rename()方法的流程图

13274599-8483ea740acc1f2e.png
15. ClientProtocol.rename()调用流程图.png

首先看下RPC协议的定义部分。

ClientProtocol协议定义了HDFS客户端与Namenode交互的所有方法,但是ClientProtocol协议中的方法的参数是无法在网络中传输的,需要对参数进行序列化操作,所以HDFS又定义了ClientNamenodeProtocolPB协议,ClientNamenodeProtocolPB协议包含了ClientProtocol定义的所有方法,但是参数却是使用protobuf序列化后的格式。这里还是以rename()方法为例,ClientNamenodeProtocolPB将ClientProtocol中rename(String,String)方法的两个参数抽象成一个RenameRequestProto对象,rename()的方法签名也就变成了rename(RenameRequestProto),这里的RenameRequestProto对象是通过protobuf序列化后的对象,是可以在网络上传输的对象。

再来看rename()调用,为了将不可以序列化的ClientProtocol接口调用转换为可以调用的ClientNamenodeProtocolPB接口调用,HDFS引入了两个适配器类(使用适配器模式的类)进行接口适配。适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作

  1. ClientNamenodeProtocolTranslatorPB类

    作为Client侧的适配器类,实现了ClientProtocol接口,它内部拥有了一个实现了ClientNamenodeProtocolPB接口的对象,可以将ClientProtocol调用适配成ClientNamenodeProtocolPB调用。以rename()调用为例,ClientNamenodeProtocolTranslatorPB将rename(String,String)调用中的两个String参数序列化成一个RenameRequestProto对象,然后调用ClientNamenodeProtocolPB对象的rename(RenameRequestProto)方法,这样就完成了ClientProtocol接口到ClientNamenodeProtocolPB接口的适配

  2. ClientNamenodeProtocolServerSideTranslatorPB类

    作为Server侧的适配器类,实现了ClientNamenodeProtocolPB

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值