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());
// 调用接口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