远程过程调用协议(RPC),是一种通过网络从远程计算机程序上请求服务,而不需要了解网络技术的协议。它采用C/S模式,在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序变得简单。它的进程运行在不同的机器上。RPC在Hadoop上主要是用jdk的动态代理实现不同进程之间的方法调用。 下面在Centos7上写一个RPC通信的例子: 1、导入Hadoop相关的源码包。 2、创建一个协议端口
package RPCPackage01; public interface ClientProtocal { public static final long versionID=12345l;/波段 public String getMetaData(String filename); }3、服务器端实现协议端口
package RPCPackage01; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.ipc.RPC; import org.apache.hadoop.ipc.Server; public class RPCServer_NameNode implements ClientProtocal { public static void main(String[] args) throws Exception {//设置协议,地址,端口号 Server server= new RPC.Builder(new Configuration()).setInstance(new RPCServer_NameNode()).setProtocol(ClientProtocal.class).setBindAddress("192.168.110.113").setPort(1234).build(); server.start(); } public String getMetaData(String filename) { System.out.println("正在找元数据信息running......"); return filename+"的元数据信息找到了,给你....."; } }4、客户端通过代理调用服务器方法
package RPCPackage01; import java.net.InetSocketAddress; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.ipc.RPC; public class RPCClient_Hdfs {//客户端拿到代理对象 public static void main(String[] args) throws Exception { ClientProtocal proxy = RPC.getProxy(ClientProtocal.class, 12345l, new InetSocketAddress("192.168.110.113",1234), new Configuration()); String mataData = proxy.getMetaData("/words.txt");//代理对象调用server的方法 String mataData=proxy.getMetaData("/words.txt"); System.out.println(mataData); } }