zoukankan      html  css  js  c++  java
  • Hadoop的RPC分析

    一、基础知识

      原理 http://www.cnblogs.com/edisonchou/p/4285817.html,这个谢了一些rpc与hadoop的例子。

      用到了java的动态代理,服务端实现一个接口,客户端得到这个接口的实现类,客户端通过自定义的versionID来标志一对服务端和客户端。

    二、代码

      2.1 接口

    package rpc;
    
    import org.apache.hadoop.ipc.VersionedProtocol;
    //默认情况下,不同版本号的RPC Client和Server之间不能相互通信,因此客户端和服务端通过版本号标识。
    
    public interface RPCable extends VersionedProtocol {
    	public static final long versionID = 10010;
    	public String sayHi(String name) ;
    	
    }
    

      我原来没继承VersionedProtocol接口,也成功了。接口不能在实现接口

      2.2 服务端

    package rpc;
    
    import java.io.IOException;
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.ipc.ProtocolSignature;
    import org.apache.hadoop.ipc.RPC;
    import org.apache.hadoop.ipc.RPC.Server;
    
    
    //动态代理:客户端和服务端同时实现一个接口
    //可以在linux和win下   
    //不同main进程下相互调用
    
    //是不同进程见的方法调用
    //底层走的是jav的rmi
    
    public class RPCServer implements RPCable{
    	
    	public String sayHi(String name) {
    		return "HI!"+name;
    	}
    
    	public static void main(String[] args) throws Exception {
    		// TODO Auto-generated method stub
    		Configuration conf = new Configuration();
    		//方法的调用连   因为每次调用返回的是this
    		Server server = new RPC.Builder(conf).setProtocol(RPCable.class).
    		setInstance(new RPCServer()).setBindAddress("localhost").
    		setPort(9527).build();
    		server.start();
    		  
    	}
    
    	@Override
    	public ProtocolSignature getProtocolSignature(String arg0, long arg1,
    			int arg2) throws IOException {
    		// TODO Auto-generated method stub
    		return null;
    	}
    
    	@Override
    	public long getProtocolVersion(String arg0, long arg1) throws IOException {
    		// TODO Auto-generated method stub
    		return 0;
    	};
    
    }
    

      我原来没继承VersionedProtocol类,那么服务端不需要下面的两个方法,继承了以后必须写。

      2.3 客户端

    package rpc;
    
    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) throws Exception {
    		// TODO Auto-generated method stub
    		//协议一般是.class
    		RPCable proxy = RPC.getProxy(RPCable.class, 10010,
    				new InetSocketAddress("localhost",9527), new Configuration());
    		String res = proxy.sayHi("!!!!!!!!!!!!");
    		System.out.println(res);
    		RPC.stopProxy(proxy);
    	}
    
    }
    

    三、结束

      rpc不受系统、地理位置的限制。

      不相信的话可以在和护短打断点,一步一步发现进入了;额服务器端。

      做的时候如果不知道使用那个类哭下的东西,可以打开对应类的class文件,可能是黑色,不是源码,那么点击attach source找到hadoop的源码包就可以了,导进去就看到的是普通的和咱的java类似的文件,可以看看里面的蚕食来自那个包。

  • 相关阅读:
    线性判别分析(Linear Discriminant Analysis, LDA)算法分析
    OpenCV学习(37) 人脸识别(2)
    OpenCV学习(36) 人脸识别(1)
    OpenCV学习(35) OpenCV中的PCA算法
    PCA的数学原理
    OpenCV学习(34) 点到轮廓的距离
    OpenCV学习(33) 轮廓的特征矩Moment
    OpenCV学习(32) 求轮廓的包围盒
    http://www.cnblogs.com/snake-hand/p/3206655.html
    C++11 lambda 表达式解析
  • 原文地址:https://www.cnblogs.com/hxsyl/p/6138292.html
Copyright © 2011-2022 走看看