Hadoop RPC框架

1、RPC框架概述1.1 RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。1.2
摘要由CSDN通过智能技术生成
1、RPC框架概述
1.1 RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。
1.2 RPC通常采用客户端服务器模型,其框架主要有以下几部分
  • 通信模块:实现请求应该协议。主要分为同步方式和异步方式。
  • stub程序:客户端和服务器均包含stub程序,可以看做代理程序。使得远程函数表现的跟本地调用一样,对用户程序完全透明。
  • 调度程序:接受来自通信模块的请求消息,根据标识选择stub程序处理。并发量大一般采用线程池处理。
  • 客户程序/服务过程:请求发出者和请求的处理者。
1.3 RPC流程图


2、Hadoop RPC基本框架
2.1Hadoop RPC的使用方法见代码
服务
public interface MyBiz extends VersionedProtocol {
    long PROTOCOL_VERSION = 12321443L;
    String hello(String name);
}
public class MyBizImpl implements MyBiz {
    @Override
    public long getProtocolVersion(String arg0, long arg1) throws IOException {
        return PROTOCOL_VERSION;
    }

    @Override
    public String hello(String name) {
        System. out.println( "invoked");
        return "hello " + name;
    }
}

服务器
public class MyServer {
    public static final String SERVER_ADDRESS = "localhost";
    public static final int SERVER_PORT = 12345;

    public static void main(String[] args) throws IOException {
        Server server = RPC. getServer(new MyBizImpl(), SERVER_ADDRESS, SERVER_PORT , new Configuration());
        server.start();
    }
}

客户端
public class MyClient {
    public static void main(String[] args) throws IOException {
        MyBiz proxy = (MyBiz) RPC. getProxy(MyBiz.class, MyBiz.PROTOCOL_VERSION,
                new InetSocketAddress(MyServer. SERVER_ADDRESS,MyServer.SERVER_PORT),
                new Configuration());
        String result = proxy.hello( "5");
        System. out.println(result);
        RPC.stopProxy(proxy);
    }
}

2.2 org.apache.hadoop.ipc.RPC类解析
RPC类主要包含三部分:
  • ClientCache(成员变量):根据用户提供的SocketFactory来缓存Client对象,以便重用Client对象。
  • Server(内部类):继承Server抽象类,利用反射实现了call方法,即客户端请求的方法和对应参数完成方法调用。
  • Invocation(内部类):将要调用的方法名和参数打包成可序列化的对象,方便客户端和服务器之间传递。

2.3 客户端
  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值