Hadoop中的RPC调用原理

来源:互联网 发布:win10软件弹窗太小 编辑:程序博客网 时间:2024/04/26 15:39

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

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

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

(1)E:\hadoop\hadoop-2.6.0\share\hadoop\common文件夹中的jar。

(2)E:\hadoop\hadoop-2.6.0\share\hadoop\common\lib文件夹中的jar

(3)E:\hadoop\hadoop-2.6.0\share\hadoop\hdfs文件夹中的jar

(4)E:\hadoop\hadoop-2.6.0\share\hadoop\hdfs\lib文件夹中的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());//调用接口sayHelloString 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

 



0 0