码迷,mamicode.com
首页 > 其他好文 > 详细

Hadoop RPC通信

时间:2019-01-11 23:12:38      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:config   class   对象   server   size   except   als   use   ado   

Remote Procedure Call(简称RPC):远程过程调用协议
1. 通过网络从远程计算机程序上请求服务
2. 不需要了解底层网络技术的协议(假定某些传输协议的存在,如TCP或UDP)
3. 采用客户机/服务机模式

请求程序就是一个客户机,服务提供程序就是一个服务器

例子:hadoop RPC机制的一个简单实现

1.导jar包,/share/hadoop/common 的相关的jar包 以及/share/hadoop/hdfs 相关的jar包

2.编程实现

1). 定义一个协议接口 如 Isay 接口

public interface Isay {

    public static final long versionID=1234L;//前后一致

    public String say(String username);
}

2). 创建通信的服务端 (服务程序实现协议接口)

 

public class SayRpcServer implements Isay{

    //实现Isay接口
    @Override
    public String say(String username) {
        // TODO Auto-generated method stub
        System.out.println("server received data->["+username+"]");
        return "Hello! ["+username+"]";
    }

    public static void main(String[] args) throws HadoopIllegalArgumentException, IOException {
        Configuration conf = new Configuration();
        //创建builder对象
        Builder builder = new RPC.Builder(conf);
        //为builder设置服务对象,服务端地址,端口,定义代理协议
        builder.setInstance(new SayRpcServer()).setBindAddress("Master").setPort(8001).setProtocol(Isay.class);
        //创建  server
        Server server = builder.build();
        //启动 server
        server.start();
        System.out.println("server started");
    }

}

 

3).创建一个通信客户端

public class SayRpcClient {
    private static Scanner sc;

    public static void main(String[] args) throws IOException {

        InetSocketAddress inetSocketAddress=new InetSocketAddress("Master", 8001);
        Configuration conf=new Configuration();
        //初始化 RPC 代理
        Isay proxySay=RPC.getProxy(Isay.class, 1234L, inetSocketAddress, conf);

        System.out.println("请输入用户名(quit退出)");
        //从控制台读入数据
        sc=new Scanner(System.in);
        while(sc.hasNext()) {
            String userName=sc.next();
            if("quit".equals(userName)) {//设定退出条件
                System.out.println("RPC client exited");
                return ;
            }
            String s=proxySay.say(userName);//远程调用
            System.out.println(s);
            System.out.println("请再输入姓名(quit退出)");
        }
    }
}

 

4)输出结果 
1.启动服务端

server started

2.启动客户端

请输入用户名(quit退出)
Jack
Hello! [Jack]
请再输入姓名(quit退出)
Mark
Hello! [Mark]
请再输入姓名(quit退出)
quit
RPC client exited

同时server的输出结果

server started
server received data->[Jack]
server received data->[Mark]

 

Hadoop RPC通信

标签:config   class   对象   server   size   except   als   use   ado   

原文地址:https://www.cnblogs.com/tongxupeng/p/10257614.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!