Hadoop的RPC机制

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

}

你可能感兴趣的:(Hadoop)