• hadoop的RPC调用原理


      1. RPC(Remote Procedure Call Protocol)远程方法调用,客户端对服务端进行访问,服务端通过创建一个服务端的代理对象对服务端中的方法进行访问。要理解代理。 

         2.远程方法调用的实现有:webservice, hessian,RMI,但是他们与Hadoop的RPC的实现目的相同,都是通过客户端对服务端进行访问。

         3.  工程进行建立后需要导入jar包

    (1)E:hadoophadoop-2.6.0sharehadoopcommon文件夹中的jar。

    (2)E:hadoophadoop-2.6.0sharehadoopcommonlib文件夹中的jar

    (3)E:hadoophadoop-2.6.0sharehadoophdfs文件夹中的jar

    (4)E:hadoophadoop-2.6.0sharehadoophdfslib文件夹中的jar

    5. 下面上代码来对整个过程进行理解。

    客户端代码

    package com.jn.hadoop.rpc;
    
    import java.io.IOException;
    import java.net.InetSocketAddress;
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.ipc.RPC;
    
    public class RPCClient {
    
    	/**
    	 * @param args
    	 * @throws IOException 
    	 */
    	public static void main(String[] args) throws IOException {
    //		利用代理获取一个服务端代理
    		RPCServer proxy = RPC.getProxy(RPCServer.class, 456435L, new InetSocketAddress("192.168.40.235", 9999),new Configuration());
    //		调用接口sayHello
    		String result = proxy.sayHello("jiangning");
    		System.out.println(result);
    	}
    
    }
    

    服务端代码

    package com.jn.hadoop.rpc;
    /**
     * 
     * @author jiangning
     *	服务端接口
     */
    public interface RPCServer {
    //  必须有这个versionID否则会报错
    	public static final long versionID = 89899L;
    //	接口,java的代理必须有接口
    	public String sayHello(String name);
    }
    
    package com.jn.hadoop.rpc;
    
    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.Server;
    /**
     * 服务端接口实现类
     * @author jiangning
     *
     */
    public class RPCServerImpl implements RPCServer{
    
    	public String sayHello(String name){
    		return "goodluck " + name;
    	}
    	public static void main(String[] args) throws HadoopIllegalArgumentException, IOException {
    //		获取Configuration对象
    		Configuration conf = new Configuration();
    //		创建服务端服务
    		Server server = new RPC.Builder(conf).setProtocol(RPCServer.class).setInstance(new RPCServerImpl()).setBindAddress("192.168.40.235").setPort(9999).build();
    //		启动服务
    		server.start();
    	}
    
    }
    


    打包进行运行

    客户端打包能够直接运行的jar

    (1) 在工程上点击右键,选择Export

    (2) 点击“RunnableJAR file”

    (3) 选择Main方法的类。选择jar包生成的目录,选择“Extractrequired libraries into generated JAR” 点击“Finish”

    完成。

    将生成的jar包上传到Linux

    执行下面命令:java -jar RPCClient.jar

  • 相关阅读:
    通过包名获取该包下的所有类
    spring各版本下载地址
    Hash函数和消息摘要算法
    @Value在Controller中取值
    Velocity根据模版生成静态html
    所谓人生
    用递归解决问题
    获取客户端IP
    windows下文件名非法字符
    各控件所支持的数据源格式
  • 原文地址:https://www.cnblogs.com/honeybusybee/p/4737811.html
Copyright © 2020-2023  润新知