hadoop的RPC机制
2015-10-21 15:54
337 查看
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个步骤。
定义RPC协议
RPC协议是客户端和服务器端之间的通信接口,它定义了服务器端对外提供的服务接口。如下所示,我们定义一个ClientProtocol通信接口,声明了echo()和add()两个方法。需要注意的是,Hadoop中所有自定义RPC接口都需要继承VersionedProtocol接口,它描述了协议的版本信息。
实现RPC协议
Hadoop RPC协议通常是一个Java接口,用户需要实现该接口。对ClientProtocol接口进行简单的实现如下所示:
构造并启动RPC Server
直接使用静态类Builder构造一个RPC Server,并调用函数start()启动该Server:
其中,BindAddress(由函数setBindAddress设置)和Port(由函数setPort设置,0表示由系统随机选择一个端口号)分别表示服务器的host和监听端口号,而NnumHandlers(由函数setNumHandlers设置)表示服务器端处理请求的线程数目。到此为止,服务器处理监听状态,等待客户端请求到达。
构造RPC Client并发送RPC请求
使用静态方法getProxy构造客户端代理对象,直接通过代理对象调用远程端的方法,具体如下所示:
经过以上四步,我们便利用Hadoop RPC搭建了一个非常高效的客户机–服务器网络模型。接下来,我们将深入到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个步骤。
定义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; }
实现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; } }
构造并启动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设置)表示服务器端处理请求的线程数目。到此为止,服务器处理监听状态,等待客户端请求到达。
构造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内部,剖析它的设计原理及技巧。
相关文章推荐
- CentOS 操作
- Linux下搭建php环境
- How To Use The Active Directory Topology Diagrammer
- linux 软件包的命名规则
- 蓝牙核心技术了解(蓝牙协议、架构、硬件和软件笔记)
- tomcat向WebSphere移植
- FTP-CentOS7
- FTP-CentOS7
- linux之vim编辑器与shell编程基础
- ISLR_Propotion
- linux makefile详细教程
- centos 6.4编译gcc升级过程
- Linux虚拟内存管理 - Page Table的作用
- 使用VS2013+VisualGDB开发Linux程序图文教程
- linux sed命令使用
- 一个简单的shell程序
- 浅析Docker的网络模式
- Opencv实现的简易绘图工具
- Hadoop2.6.0自动化部署脚本(一)
- Linux 多网卡的7种bond模式原理