远程过程调用协议(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);
}
}