Hadoop RPC

第一部分:什么是RPC

RPC (Remote Procedure Call Protocol) – 远程过程协议调用 。通过 RPC 我们可以从网络上的计算机请求服务,而不需要了 解底层网络协议。 Hadoop 底层的交互都是通过 rpc 进行的。例 如: datanode 和 namenode 、 tasktracker 和 jobtracker 、 secondary namenode 和 namenode 之间的通信都是通过 rpc 实 现的。

RPC 模式

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

工作原理

运行时 , 一次客户机对服务器的 RPC 调用 , 其内部操作大致有如下十步:

1. 调用客户端句柄;执行传送参数

2. 调用本地系统内核发送网络 消息

3. 消息传送到远程 主机

4. 服务器句柄得到消息并取得参数

5. 执行远程过程

6. 执行的过程将结果返回服务器句柄

7. 服务器句柄返回结果,调用远程系统内核

8. 消息传回 本地主机

9. 客户句柄由内核接收消息

10. 客户接收句柄返回的数据

第二部分:Hadoop的RPC机制

Hadoop PRC

•Hadoop RPC在整个Hadoop中应用非常广泛,Client、DataNode、NameNode之间的通讯全靠它了。

举个例子,我们平时操作HDFS的时候,使用的是FileSystem类,它的内部有个DFSClient对象,这个对象负责与NameNode打交道。 在运行时,DFSClient在本地创建一个NameNode的代理,然后就操作这个代理,这个代理就会通过网络,远程调用到NameNode的方法,也 能返回值。

•Hadoop RPC 位于org.apache.hadoop.ipc

•Hadoop RPC = 动态代理 + 定制好的二进制流

•分为Server与Clinet端

服务端流程

•Listener线程监视RPC Client发送过来的数据。

•当有数据可以接收时,调用Connection的readAndProcess方法。

• Connection边接收边对数据进行处理,如果接收到一个完整的Call包,则构建一个Call对象。PUSH到Call队列中,由Handler线程来处理Call队列中的所有Call。

•Handler线程监听Call队列,如果Call队列非空,按FIFO规则从Call队列取出Call。

•将Call交给RPC.Server处理。

•借助JDK提供的Method,完成对目标方法的调用,目标方法由具体的业务逻辑实现。

•返回响应。Server.Handler按照异步非阻塞的方式向RPC Client发送响应,如果有未发送出的数据,则交由Server.Responder来完成。

时间: 2024-12-24 05:54:56

Hadoop RPC的相关文章

Hadoop RPC简单例子

jdk中已经提供了一个RPC框架-RMI,但是该PRC框架过于重量级并且可控之处比较少,所以Hadoop RPC实现了自定义的PRC框架. 同其他RPC框架一样,Hadoop RPC分为四个部分: (1)序列化层:Clent与Server端通信传递的信息采用了Hadoop里提供的序列化类或自定义的Writable类型: (2)函数调用层:Hadoop RPC通过动态代理以及java反射实现函数调用: (3)网络传输层:Hadoop RPC采用了基于TCP/IP的socket机制: (4)服务器端

hadoop rpc 学习

Hadoop rpc 学习(版本2.6.0) 客户端部分 1.生成动态代理类(org.apache.hadoop.ipc.WritableRpcEngine.class 311行) 2.代理类执行任务入口(org.apache.hadoop.ipc.WritableRpcEngine.class 245行) 3.hadoop rpc client 给服务端发送请求 调用(org.apache.hadoop.ipc.Client.class 998行) public void sendRpcReq

Hadoop RPC通信Client客户端的流程分析

Hadoop的RPC的通信与其他系统的RPC通信不太一样,作者针对Hadoop的使用特点,专门的设计了一套RPC框架,这套框架个人感觉还是有点小复杂的.所以我打算分成Client客户端和Server服务端2个模块做分析.如果你对RPC的整套流程已经非常了解的前提下,对于Hadoop的RPC,你也一定可以非常迅速的了解的.OK,下面切入正题. Hadoop的RPC的相关代码都在org.apache.hadoop.ipc的包下,首先RPC的通信必须遵守许多的协议,其中最最基本的协议即使如下: /**

hadoop rpc基础

第一部分: hadoop rpc基础 RPC,远程程序调用,分布式计算中C/S模型的一个应用实例. 同其他RPC框架一样,Hadoop分为四个部分: 序列化层:支持多种框架实现序列化与反序列化 函数调用层:利用java反射与动态代理实现 网络传输层:基于TCP/IP的Socket机制 服务的处理框架:基于Reactor模式的事件驱动IO模型 Hadoop RPC主要对外提供2种接口 public static ProtocolProxy getProxy/waitForProxy: 构造一个客户

Hadoop RPC远程过程调用源码解析及实例

什么是RPC? 1.RPC(Remote Procedure Call)远程过程调用,它允许一台计算机程序远程调用另外一台计算机的子程序,而不用去关心底层的网络通信细节,对我们来说是透明的.经常用于分布式网络通信中. 2.Hadoop的进程间交互都是通过RPC来进行的,比如Namenode与Datanode之间,Jobtracker与Tasktracker之间等. RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据.在OSI网络通信模型中, RPC跨越了传输层和应用层

RPC与Hadoop RPC机制

一.什么是RPC? (1)Remote Procdure call ,远程方法调用,它允许一台计算机程序远程调用另外一台计算机的子程序,而不用去关心底层的网络通信细节,对我们来说是透明的.经常用于分布式网络通信中. (2)Hadoop的进程间交互都死通过RPC来进行的,比如Namenode与Datanode直接,Jobtracker与Tasktracker之间等. 流程: (1)RPC采用了C/S的模式: (2)Client端发送一个带有参数的请求信息到Server: (3)Server接收到这

Hadoop RPC protocol description--转

原文地址:https://spotify.github.io/snakebite/hadoop_rpc.html Snakebite currently implements the following protocol in snakebite.channel.SocketRpcChannel to communicate with the NameNode. Connection The Hadoop RPC protocol works as described below. On con

每天收获一点点------Hadoop RPC机制的使用

一.RPC基础概念 1.1 RPC的基础概念 RPC,即Remote Procdure Call,中文名:远程过程调用: (1)它允许一台计算机程序远程调用另外一台计算机的子程序,而不用去关心底层的网络通信细节,对我们来说是透明的.因此,它经常用于分布式网络通信中. RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据.在OSI网络通信模型中,RPC跨越了传输层和应用层.RPC使得开发包括网络分布式多程序在内的应用程序更加容易. (2)Hadoop的进程间交互都是通过R

Hadoop RPC通信Server端的流程分析

前2天刚刚小小的分析下Client端的流程,走的还是比较通顺的,但是RPC的服务端就显然没有那么简单了,毕竟C-S这种模式的,压力和重点都是放在Server端的,所以我也只能做个大概的分析,因为里面细节的东西太多,我也不可能理清所有细节,但是我会集合源代码把主要的流程理理清.如果读者想进一步学习的话,可自行查阅源码. Server服务端和Client客户端在某些变量的定义上还是一致的,比如服务端也有Call,和Connection,这个很好理解,Call回调,和Connection连接是双向的.