hadoop的RPC机制

本文详细介绍了如何使用HadoopRPC构建高效、可靠的客户端-服务器网络模型,包括定义RPC协议、实现协议、构造并启动RPCServer以及构造RPCClient发送RPC请求等关键步骤。深入剖析了HadoopRPC的设计原理及技巧。
摘要由CSDN通过智能技术生成

Hadoop RPC使用方法

Hadoop RPC对外主要提供了两种接口(见类org.apache.hadoop.ipc.RPC),分别是:

public static ProtocolProxy getProxy/waitForProxy(…):构造一个客户端代理对象(该对象实现了某个协议),用于向服务器发送RPC请求。

public static Server RPC.Builder (Configuration).build():为某个协议(实际上是Java接口)实例构造一个服务器对象,用于处理客户端发送的请求。

通常而言,使用Hadoop RPC可分为以下4个步骤。

  1. 定义RPC协议

RPC协议是客户端和服务器端之间的通信接口,它定义了服务器端对外提供的服务接口。如下所示,我们定义一个ClientProtocol通信接口,声明了echo()和add()两个方法。需要注意的是,Hadoop中所有自定义RPC接口都需要继承VersionedProtocol接口,它描述了协议的版本信息。

interface ClientProtocol extends org.apache.hadoop.ipc.VersionedProtocol {  
//版本号,默认情况下,不同版本号的RPC Client和Server之间不能相互通信  
    public static final long versionID = 1L;  
    String echo(String value) throws IOException;  
    int add(int v1, int v2) throws IOException;  
  } 
  1. 实现RPC协议

Hadoop RPC协议通常是一个Java接口,用户需要实现该接口。对ClientProtocol接口进行简单的实现如下所示:

public static class ClientProtocolImpl implements ClientProtocol {  
    //重载的方法,用于获取自定义的协议版本号,  
    public long getProtocolVersion(String protocol, long clientVersion) {  
      return ClientProtocol.versionID;  
     }  
    //重载的方法,用于获取协议签名  
    public ProtocolSignature getProtocolSignature(String protocol, long clientVersion,  
    inthashcode) {  
      return new ProtocolSignature(ClientProtocol.versionID, null);  
    }  
    public String echo(String value) throws IOException {  
      return value;  
     }  
    public int add(int v1, int v2) throws IOException {  
      return v1 + v2;  
     }  
  } 
  1. 构造并启动RPC Server

直接使用静态类Builder构造一个RPC Server,并调用函数start()启动该Server:

Server server = new RPC.Builder(conf).setProtocol(ClientProtocol.class)  
   .setInstance(new ClientProtocolImpl()).setBindAddress(ADDRESS).setPort(0)  
                            .setNumHandlers(5).build();  
server.start(); 

其中,BindAddress(由函数setBindAddress设置)和Port(由函数setPort设置,0表示由系统随机选择一个端口号)分别表示服务器的host和监听端口号,而NnumHandlers(由函数setNumHandlers设置)表示服务器端处理请求的线程数目。到此为止,服务器处理监听状态,等待客户端请求到达。

  1. 构造RPC Client并发送RPC请求

使用静态方法getProxy构造客户端代理对象,直接通过代理对象调用远程端的方法,具体如下所示:

proxy = (ClientProtocol)RPC.getProxy(  
         ClientProtocol.class, ClientProtocol.versionID, addr, conf);  
int result = proxy.add(5, 6);  
String echoResult = proxy.echo("result"); 

经过以上四步,我们便利用Hadoop RPC搭建了一个非常高效的客户机–服务器网络模型。接下来,我们将深入到Hadoop RPC内部,剖析它的设计原理及技巧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值