rpc,客户端与NameNode通信的过程
2015-04-08 00:03
302 查看
远程过程:java进程.即一个java进程调用另外一个java进程中对象的方法.
调用方称作客户端(client),被调用方称作服务端(server).rpc的通信在java中表现为客户端去调用服务端对象中的方法.RPC通信就是cs结构的通信.client端会知道服务端被调用对象的接口.
RPC是hadoop分布式机制运行的基础.
接口对应的实现类:MyBiz
服务类:MyServer
客户端:MyClient
ClientProtocol:是我们客户端(FileSystem)与NameNode通信的接口.
DatanodeProtocol:是DataNode和NameNode通信的接口.
![](http://images.cnitblog.com/blog2015/708309/201504/082302109464426.png)
DFSClient:直接调用NameNode接口的对象.
用户代码是通过DistributedFileSystem调用DFSClient对象,才能与NameNode打交道.
我们的RPC客户端实际上是DFSClient,服务端是NameNode.
调用方称作客户端(client),被调用方称作服务端(server).rpc的通信在java中表现为客户端去调用服务端对象中的方法.RPC通信就是cs结构的通信.client端会知道服务端被调用对象的接口.
RPC是hadoop分布式机制运行的基础.
代码示例:
接口:MyBizablepublic interface MyBizable extends VersionedProtocol{ public static final int PORT = 123456 ; public abstract String hello(String name); public abstract long getProtocolVersion(String protocol,long clientVersion)throws IOException; }
接口对应的实现类:MyBiz
public class MyBiz implements MyBizable { @Override public long getProtocolVersion(String protocol, long clientVersion) throws IOException { return MyBizable.PORT; } @Override public String hello(String name) { System.out.println("我被调用了."); return "hello "+ name; } }
服务类:MyServer
public class MyServer { public static final String ADDRESS = "localhost"; public static final int PORT = 2454; public static void main(String[] args) throws Exception{ /** * 构造一个RPC的服务端 * @param instance 实例对象的方法会被客户端调用。 * @param bindAddress 监听绑定的地址 * @param port 监听连接的端口 * @param conf 配置 */ Server server = RPC.getServer(new MyBiz(), MyServer.ADDRESS, MyServer.PORT, new Configuration()); server.start(); } }
客户端:MyClient
public class MyClient { public static void main(String[] args) throws Exception{ MyBizable client = (MyBizable) RPC.getProxy(MyBizable.class, MyBizable.PORT, new InetSocketAddress(MyServer.ADDRESS,MyServer.PORT), new Configuration()); String result = client.hello("world"); System.out.println(result); } }
客户端与NameNode通信的过程:
NameNode本身就是一个RPC的服务端,主要实现的接口有:ClientProtocol,DatanodeProtocol,NamenodeProtocolClientProtocol:是我们客户端(FileSystem)与NameNode通信的接口.
DatanodeProtocol:是DataNode和NameNode通信的接口.
![](http://images.cnitblog.com/blog2015/708309/201504/082302109464426.png)
DFSClient:直接调用NameNode接口的对象.
用户代码是通过DistributedFileSystem调用DFSClient对象,才能与NameNode打交道.
我们的RPC客户端实际上是DFSClient,服务端是NameNode.
NameNode为什么要用rpc机制?
RPC是远程过程调用,会起多个java进程,并且之间进行通信的时候用的是Scoket通信,也就意味着RPC通信客户端和服务端不见得是在位于同一台机器上,因为socker通信可以指定ip和端口,意味着我们整个完整的hadoop体系结构是可以分散在多个进程,多个不同的服务器之上的,所以我们的NameNode作为其中的一部分,必然也是需要实现RPC机制的.可以让我们一个完整的软件程序运行在不同的服务器上,实现分布式.相关文章推荐
- 客户端与NameNode通信过程(源码角度分析)
- Hadoop中的RPC实现——客户端通信组件
- 客户端到服务器端的通信过程
- Hadoop RPC实例和通信过程分析
- 一个RPC服务客户端代理中间件的设计过程的回顾
- 客户端到服务器端的通信过程及原理(很清晰,保证看后顿悟)
- BT客户端源码分析之七:客户端与tracker通信过程
- 流式套接字实现简单的客户端/服务端通信过程
- 客户端到服务器端的通信过程及原理
- 客户端到服务器端的通信过程及原理
- 客户端到服务器端的通信过程及原理
- HDFS Namenode接收RPC请求过程
- Hadoop中的RPC实现——客户端通信组件
- OpenSSL中服务端和客户端加密通信中密钥生成过程
- 客户端到服务器端的通信过程
- NFS客户端RPC请求封装过程
- java客户端与服务器通信过程示意图
- McAfee ePO4.0与客户端通信的过程
- Linux socket编程入门及客户端服务器端通信实现 – 提高篇:TCP连接过程分析
- Android BLE与终端通信(三)——客户端与服务端通信过程以及实现