• Hadoop RPC通信


    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]
    希望在知识中书写人生的代码
  • 相关阅读:
    CentOS、Ubuntu、Debian三个linux比较异同
    中国版 Ubuntu Kylin 14.04 LTS 麒麟操作系统中文版发布下载 (Ubuntu天朝定制版)
    keras之save & reload model
    2.keras实现-->深度学习用于文本和序列
    迭代器 、生成器、可迭代对象
    numpy 中clip函数的使用
    1.keras实现-->自己训练卷积模型实现猫狗二分类(CNN)
    1.keras实现-->使用预训练的卷积神经网络(VGG16)
    L1正则化和L2正则化
    keras搭建深度学习模型的一些小tips
  • 原文地址:https://www.cnblogs.com/tongxupeng/p/10259555.html
Copyright © 2020-2023  润新知