Hadoop之RPC机制

什么是RPC机制

Remote Procedure Call(简称:RPC):远程过程调用协议。

RPC是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易

RPC的运行模式

RPC采用客户机/服务器模式。

请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息的到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。

RPC的简单实现

客户端和服务端通信必须要按照某种协议来执行,要不就乱套了。那么我们来定一个RPC协议的接口,里面包含协议的版本号,及RPC方法名。

  1. package com.itunic.rpc;
  2. /**
  3.  * RPC协议定义接口
  4.  * @author itunic
  5.  *
  6.  */
  7. public interface RPCProtocal {
  8.     /**
  9.      * 定义RPC协议版本号
  10.      */
  11.     public static final long versionID = 1111;
  12.     /**
  13.      * 根据id获取名字
  14.      * @param id
  15.      * @return
  16.      */
  17.     public String getName(String id);
  18. }

定义完成后,实现RPC服务端,服务端必须实现上面RPC接口。然后在启动服务时将服务绑定到某个ip下的某个端口。这样才能正常的进行服务。

  1. package com.itunic.rpc;
  2. import java.io.IOException;
  3. import org.apache.hadoop.HadoopIllegalArgumentException;
  4. import org.apache.hadoop.conf.Configuration;
  5. import org.apache.hadoop.ipc.RPC;
  6. import org.apache.hadoop.ipc.Server;
  7. /**
  8.  * RPC服务端的简单实现
  9.  * @author itunic
  10.  *
  11.  */
  12. public class RPCService implements RPCProtocal {
  13.     @Override
  14.     public String getName(String id) {
  15.         System.out.println("查找");
  16.         return id + "的Name";
  17.     }
  18.     /**
  19.      * 设置RPC协议接口,将服务绑定到192.168.31.104:9999
  20.      * @param args
  21.      * @throws HadoopIllegalArgumentException
  22.      * @throws IOException
  23.      */
  24.     public static void main(String[] args) throws HadoopIllegalArgumentException, IOException {
  25.         Server server = new RPC.Builder(new Configuration()).setInstance(new RPCService())
  26.                 .setProtocol(RPCProtocal.class).setBindAddress("192.168.31.104").setPort(9999).build();
  27.         server.start();
  28.     }
  29. }

这样的话服务端就实现完毕了。我们运行一下,看看结果

Hadoop之RPC机制

可以看到服务端已经正常运行了。接下来我们实现RPC客户端的代码。

  1. package com.itunic.rpc;
  2. import java.io.IOException;
  3. import java.net.InetSocketAddress;
  4. import org.apache.hadoop.conf.Configuration;
  5. import org.apache.hadoop.ipc.RPC;
  6. /**
  7.  * RPC客户端简单实现
  8.  * @author itunic
  9.  *
  10.  */
  11. public class RPCClient {
  12.     public static void main(String[] args) throws IOException {
  13.         /**
  14.          * 绑定RPC协议接口,输入RPC协议版本号,绑定服务端地址和端口
  15.          * 绑定完成后,调用接口的getName方法。
  16.          */
  17.         RPCProtocal proxy = RPC.getProxy(RPCProtocal.class1111new InetSocketAddress("192.168.31.104"9999),
  18.                 new Configuration());
  19.         String name= proxy.getName("itunic");
  20.         System.out.println(name);
  21.         RPC.stopProxy(proxy);
  22.     }
  23. }

接下来我们看一下运行效果:

Hadoop之RPC机制

首先是服务端已经出发了getName方法,并已经输出到控制台。

Hadoop之RPC机制

其次是客户端已经输出。

结语

讲到这里RPC基本上介绍完毕,在了解完RPC后,就能基本理解Hadoop具体是怎么运行的了。

  • Hadoop之RPC机制已关闭评论
  • 144 views
  • A+
所属分类:未分类
avatar