hadoop RPC

来源:互联网 发布:网络教育统考成绩 编辑:程序博客网 时间:2024/05/22 16:52
     RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,
而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,

RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。

     RPC的协议有很多,比如最早的CORBA,Java RMI,Web Service的RPC风格

    

  hadoop 是基于java NIO实现的RPC协议,具体架构如下:

  

客户端跟服务器通过Listener建立连接,Listener中关注Selector对OP_ACCEPT,建立连接后就交给Reader线程处理,Reader线程的Selector中注册监听OP_READ,读取里面的请求数据,包装成Call,放到callQueue里,然后很多Handler线程去处理这些Call,处理后的结果数据放到Connectin的responseQueue里,由Responder线程发送回客户端。

hadoop RPC 实例代码

  1. 接口定义,接口中需要定义versionID

package com.liangjya.hadoop.demo;public interface IServer {public static final long versionID=100;public String sayHello(String name);}

2. 接口实现

   

package com.liangjya.hadoop.demo;public class Server implements IServer {@Overridepublic String sayHello(String name) {return " hello "+name;}}

3. RPC服务端

   

package com.liangjya.hadoop.demo;import java.io.IOException;import org.apache.hadoop.HadoopIllegalArgumentException;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.ipc.RPC;import org.apache.hadoop.ipc.RPC.Builder;public class RPCServer {public static void main(String[] args) {try {Builder server =new RPC.Builder(new Configuration())       .setProtocol(IServer.class)       .setInstance(new Server())       .setBindAddress("simulate")       .setPort(8080);server.build().start();} catch (HadoopIllegalArgumentException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}
4 客户端

   

package com.liangjya.hadoop.demo;import java.io.IOException;import java.net.InetSocketAddress;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.ipc.RPC;public class RPCClient {public static void main(String[] args) {try {IServer server=RPC.getProxy(IServer.class, 100, new InetSocketAddress("192.168.31.100", 8080), new Configuration());System.out.println(server.sayHello("liangjya"));} catch (IOException e) {e.printStackTrace();}}}




   


0 0
原创粉丝点击