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

原文地址:https://www.cnblogs.com/honeybusybee/p/4737811.html