Hadoop RPC简介

article/2025/9/21 17:15:47

RPC(Remote Procedure Call)————远程过程调用协议
Hadoop RPC在Hadoop中应用非常广泛,Client、DataNode、NameNode之间的通讯全依赖于它

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

(2)Hadoop的进程间交互都是通过RPC来进行的,比如Namenode与Datanode之间,Jobtracker与Tasktracker之间等。因此,可以说Hadoop的运行就是建立在RPC基础之上的。

RPC的显著特点

  1. 透明性:远程调用其他机器上的程序,对用户来说就像是调用本地方法一样;
  2. 高性能:RPC Server能够并发处理多个来自Client的请求;
  3. 可控性:jdk中已经提供了一个RPC框架—RMI,但是该PRC框架过于重量级并且可控之处比较少
    所以Hadoop RPC实现了自定义的PRC框架。

一个典型的RPC框架主要包括以下模块

  1. 通信模块:两个相互协作的通信模块实现请求—–应答协议。
  2. 代理程序:客户端和服务器端均包含代理程序。
  3. 调度程序:调度程序接受来自通信模块的请求消息,并根据其中的标志选择一个代理程序处理。

RPC框架分层

  1. 序列化层:Clent与Server端通信传递的信息采用了Hadoop里提供的序列化类或自定义的Writable类型;
  2. 函数调用层:Hadoop RPC通过动态代理以及java反射实现函数调用;
  3. 网络传输层:Hadoop RPC采用了基于TCP/IP的socket机制;
  4. 服务器端框架层:RPC Server利用java NIO及采用事件驱动的I/O模型,提高RPC Server的并发处理能力;

客户端和服务器端的关系

Client-NameNode之间,其中NameNode是服务器
Client-DataNode之间,其中DataNode是服务器
DataNode-NameNode之间,其中NameNode是服务器
DataNode-DateNode之间,其中某一个DateNode是服务器,另一个是客户端

Hadoop RPC主要对外提供两种接口

public static VersionedProtocol getProxy/waitForProxy()
构造一个客户端代理对象(该对象实现了某种协议),用于向服务器端发送RPC请求;
public static Server getServer()
为某个协议(实际上是Java接口)实例构造一个服务器对象,用于处理客户端发送的请求;

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

这里写图片描述

RPC实体

  1. Listener
    监听RPC Server的端口,如果客户端有连接请求到达,它就接受连接。
    然后把连接转发到某个Reader,让Reader去读取那个连接的数据。
    如果有多个Reader的话,当有新连接过来时,就在这些Reader间顺序分发。
  2. Reader
    从某个客户端连接中读取数据流,把它转化成调用对象(Call),然后放到调用队列(call queue)里
  3. Handler
    真正做事的实体。它从调用队列中获取调用信息,然后反射调用真正的对象,得到结果,然后再把此次调用放到响应队列(response queue)里
  4. Responder
    它不断地检查响应队列中是否有调用信息,如果有的话,就把调用的结果返回给客户端。

这里写图片描述

RPC实现流程

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

通信模块:实现请求应该协议。主要分为同步方式和异步方式。
stub程序:客户端和服务器均包含stub程序(代理程序)。使得远程函数表现的跟本地调用一样,对用户程序完全透明。
调度程序:接受来自通信模块的请求消息,根据标识选择stub程序处理。并发量大一般采用线程池处理。
客户程序/服务过程:请求发出者和请求的处理者

一个RPC请求从发送到获取处理结果,所经历的步骤如下:

  1. 客户程序以本地方式调用系统产生的Stub程序;
  2. 该Stub程序将函数调用信息按照网络通信模块的要求封装成消息包,并交给通信模块发送到远程服务器端;
  3. 远程服务器端接收到此消息后,将此消息发送给相应的Stub程序;
  4. Stub程序拆封消息,形成被调过程要求的形式,并调用对应的函数;
  5. 被调用函数按照所获参数执行,并将结果返回给Stub程序;
  6. Stub将此结果封装成消息,通过网络通信模块逐级地传送给客户程序;

这里写图片描述

RPC Client主要流程

  1. RPC Client发起RPC Call,通过JAVA反射机制转化为对Client.call调用
  2. 调用getConnection得到与RPC Server的链接,每一个Client都维护一个HashMap结构的到Server的连接池
  3. 通过Connection将序列化后的参数发送到RPC服务端
  4. 阻塞方式等待RPC服务端返回响应

RPC Server的主要流程
RPC Server作为服务的提供者主要有两部分组成:接收Call调用和处理Call调用。
接收Call调用负责接收来自RPC Client的调用请求,编码成Call对象放入到Call队列中。这一过程有Server.Listener完成,具体步骤如下:

  1. Listener线程监听RPC Client发过来的数据
  2. 当有数据可以接收时,调用Connection的readAndProcess方法
  3. Connection边接受数据边处理数据,当接到一个完整的Call包,则构建一个Call对象。PUSH到Call队列中,有Handler来处理Call队列中的所有Call,处理完的Call调用负责处理Call队列中的每一个调用请求,由Handler线程来完成。
  4. Handler线程监听Call队列,如果Call队列非空,按FIFO规则从Call队列中取出Call
  5. 将Call交给RPC.Server来处理
  6. 借助JDK提供的Method,完成对目标方法的调用,目标方法由具体的业务逻辑实现
  7. 返回响应。Server.Handler按照异步非阻塞的方式向RPC Client发送响应,如果有未发送出的数据,则交由Server.Responder来完成。

这里写图片描述


http://chatgpt.dhexx.cn/article/4fN6a7QT.shtml

相关文章

RPC是什么

什么是rpc框架 先回答第一个问题:什么是RPC框架? 如果用一句话概括RPC就是:远程调用框架(Remote Procedure Call) 那什么是远程调用? 通常我们调用一个PHP中的方法,比如这样一个函数方法: local…

一分钟了解什么是RPC

前言 在介绍RPC之前,先介绍另外一个概念:进程间通信(IPC,Inter-Process Communication) IPC:是指至少两个进程或线程间传送数据或信号的一些技术或方法。 我们知道进程是计算机系统分配资源的最小单位。每…

【网络】什么是RPC?RPC与HTTP有什么关系?

文章目录 RPC是什么RPC和HTTP的关系和区别[附]关于REST论文中提到的"HTTP不是RPC" 重点参考 凤凰架构-远程过程调用 既然有HTTP为什么还要有RPC? RPC是什么 RPC(Remote Procedure Call):即远程过程调用,目的是为了让计算机能够跟调…

电脑显示RPC服务器不可用是什么意思,rpc服务器不可用怎么办?rpc服务器不可用是什么意思...

很多人在使用打印机会都遇到rpc服务器不可用的问题,一时之间不知道rpc服务器不可用怎么办,无法作出有效的修复,为了解决一问题,我们首先要明白rpc服务器不可用是什么意思。 rpc服务器全称RPCremote procedure call,它是…

【网络】一文带你了解什么是RPC

一文带你了解什么是RPC 为什么要有RPC什么是RPCPRC架构组件RPC和SOA、SOAP、REST的区别RPC框架需要解决的问题?RPC的实现基础?RPC使用了哪些关键技术?主流RPC框架有哪些 为什么要有RPC http接口是在接口不多、系统与系统交互较少的情况下,初期常使用的一种通信手…

什么是RPC框架?

什么是RPC? In distributed computing, a remote procedure call (RPC) is when a computer program causes a procedure (subroutine) to execute in a different address space (commonly on another computer on a shared network), which is coded as if it wer…

什么是RPC

提到RPC(Remote Procedure Call),就躲不开提到分布式,这个促使RPC诞生的领域。 假设你有一个Calculator,以及它的实现类CalculatorImpl,那么单体应用时,要调用Calculator的add方法来执行一个加…

证书服务器rpc服务器不可用是什么意思,rpc服务器不可用是什么意思

rpc服务器不可用是什么意思 用户在使用电脑进行时间同步,安装打印机或者其它的操作的时候可能会遇到同样一个问题,那就是提示“RPC服务器不可用”,很多朋友可能对于RPC并不了解,更不知道如何解决,下面就一起来看看这个…

RPC是什么意思?

原文地址:http://baike.baidu.com/link?urlZV6b0T5v04pem1NluXrFwslmhOosGK3YAeKYBfXHF3J-cg96O7CE9j_opGpKCftpBKWqLtY9-LycDAX0ULaLpssX4IIVmK6fSdtZBzz6nbFRsA-vXppB4IV1KBfDu07pY2dgZYTn5A65RkuhPO00bf5ngU6qfujFC14JqgumBPLgqXgt1VnAzQ7xOwSbJbJkqtNcGRdPxt9f…

rpc协议服务器是什么,什么是rpc框架

第五,返回值还要发送回服务器A上的应用,也要经过序列化的方式发送,服务器A接到后,再反序列化,恢复为内存中的表达方式,交给A服务器上的应用 这里写图片描述 为什么RPC呢?就是无法在一个进程内&a…

rpc协议服务器是什么,RPC是什么?

RPC是什么? REST和RPC都常用于微服务架构中。 都是网络交互的协议规范。 通常用于多个微服务之间的通信协议。 RPC就是从一台机器(客户端)上通过参数传递的方式调用另一台机器(服务器)上的一个函数或方法(可以统称为服务)并得到返回的结果。 什么是RPC 远程方法调用…

RPC简介

1. 概述 RPC(Remote Procedure Call),即远程过程调用,是一种通过网络从远程计算机程序上请求服务、而不需要了解底层网络技术的协议。RPC协议假定某些传输协议(如TCP或UDP)的存在,为通信程序之…

【OS笔记 28】处理死锁的四种方法——预防死锁(破坏四个必要条件之一)

前面讲过预防死锁是通过破坏死锁的四个必要条件,所以就有四个预防死锁的方法吗?错!只有三种,因为互斥条件是必须的,不仅不能改变,还应该加以保证。因此只能破坏后三个条件。 一、破坏请求和保持条件 • 方…

什么是死锁,产生死锁的必要条件,以及避免死锁的方法

一、死锁的定义 死锁是指,有两个或两个以上的线程在执行的过程中,由于竞争的资源或者彼此通信而造成的一种阻塞状态,若无外力作用,他们将都无法进行下去,从而形成一直阻塞的状态叫死锁。 简单来说就是…

死锁产生的四个必要条件?如何避免和预防死锁产生?

一、什么是死锁? 两个线程或两个以上线程都在等待对方执行完毕才能继续往下执行的时候就发生了死锁。结果就是这些线程都陷入了无限的等待中,这就是死锁。 举个例子:如果线程1锁住了A,然后尝试对B进行加锁,同时线程2已…

死锁产生的原因和必要条件详解

3.5 产生死锁的原因和必要条件 在多道程序系统中,虽借助于多个进程的并发执行,改善了系统的资源利用率,提高了系统的吞吐量,但可能发生一种危险——死锁。 死锁(deadlock): 是指多个进程在运…

死锁概念,死锁产生的四个必要条件,如何避免和预防死锁

一、死锁概念 死锁是指两个或多个进程在执行的过程中,因为竞争资源而造成互相等待的现象,若无外力作用,它们都无法推进下去。 1.在等待对方时占有不可抢占的资源 举个例子,假设有P1,P2两个进程,都需要A和…

关于死锁,死锁的四个必要条件的总结

什么是死锁? 死锁,指的是多个进程再运行期间因争夺资源而产生的一种僵局,若无外力作用(破坏死锁),程序将无法运行。 死锁产生的四个必要条件 互斥条件: 进程要求对所分配的资源(如…

死锁产生的四个必要条件

一、死锁产生的四个必要条件 互斥条件:资源是独占的且排他使用,进程互斥使用资源,即任意时刻一个资源只能给一个进程使用,其他进程若申请一个资源,而该资源被另一进程占有时,则申请者等待直到资源被占有者…

什么是死锁?死锁发生的四个必要条件是什么?如何避免和预防死锁产生?

什么是死锁? 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程…