Hadoop RPC机制-原理篇

RPC是Hadoop的基础组件,提供分布式环境下的对象调用功能。之前用了三天时间分析与测试RPC,目的是想弄清楚它的整个运行机制。

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

前言:

我们一般情况下通过客户端调用服务,都是现在同一个JVM中,通过在本地JVM中创建一个服务对象,进而通过调用该对象调用其内部的相关服务方法。

当客户端与服务不在同一个JVM中,一般情况下服务被单独放在一台服务器上运行,然后将服务发布为一个webservice,此时客户端通过UDDI找到WSDL描述文档后,可以通过SOAP调用你建立的Web服务中的一个或多个操作。但SOAP协议冗余较多,占用网络带宽大,并不适合分布式机器之间频繁的通信操作。

RPC,专业名称为远程过程调用。RPC协议比SOAP更加精简,通过RPC我们可以从网络上的计算机请求服务,而不需要了解底层网络协议。Hadoop底层的交互都是通过RPC进行的。例如Client、DataNode、NameNode之间的通讯全靠它。我们操作HDFS的时候,使用的是FileSystem类,它的内部有个DFSClient对象,这个对象负责与NameNode打交道。在运行时,DFSClient在本地创建一个NameNode的代理,然后就操作这个代理,这个代理就会通过网络,远程调用到NameNode的方法,返回相应的值。

RPC模式

在java的网络编程中:当客户端发送一个字节给服务端时,服务端必须也要有一个读字节的方法在阻塞等待;反之亦然。这种我把它称为底层的通信协议。于是我们就可以想像一下,如果不使用RPC,那么在分布式调用中流程应该是样:服务器端先创建ServerSocket,在指定的ip地址和端口上监听,客户端创建到远程连接的Socket,待socket套接字完毕,我们可以从套接字拿到输入输出流InputStream,OutputStream。接着客户端就可以往输出流写序列化的参数,服务器端将读到的输入流中参数流进行反序列化成程序支持的类型,然后将处理的结果再序列化到输出流,发送给客户端。RPC就是基于此,将Socket程序进行了封装,并且定义了许多接口,将接口和接口中的方法称为协议,客户端和服务端只要实现这些接口中的方法就可以进行通信了。

工作原理

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

当然,这只是RPC实现的一个非常基础性的简单原理,便于理解。真实的RPC框架也是基于此原理,只不过在此基础上增加了许多优化和容错的功能!

基于以上工作原理,我在Github上上传了一个利用Hadoop RPC框架进行服务调用的小程序,结合起来可以更深刻的理解它的原理和应用。

下载地址:https://github.com/Jerry-Fu/HadoopRpcApplication/

时间: 2024-10-26 16:15:16

Hadoop RPC机制-原理篇的相关文章

Hadoop学习笔记—3.Hadoop RPC机制的使用

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

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

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

从Hadoop 安全机制原理到当今主流安全机制

在Hadoop Common模块中除了之前我所分析过的4大主模块,还有一个也同样是非常重要的内容,就是Security---安全模块.不过,我只是简单的分析他的实现机制,并不会涉及代码的分析.同时,我会通过对于Hadoop中采取的安全机制方法延伸到当下主流的一些安全认证方法,比如LDAP,SSL,Oauth Token等等.. 1)Hadoop Security Hadoop的Security是如何运作的呢,当然首先看看他的目录结构.下面是我截的一张图: 最频繁出现的关键词是Token(令牌),

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机制

RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.Hadoop底层的交互都是通过 rpc进行的.例如:datanode和namenode .tasktracker和jobtracker.secondary namenode和namenode之间的通信都是通过rpc实现的.下面是rpc交互过程图: RPC server端的实体模型       上 一部分是站在用户的角度,宏观地观察整个

源码级强力分析Hadoop的RPC机制

分析对象: hadoop版本:hadoop 0.20.203.0 必备技术点: 1. 动态代理(参考 :http://weixiaolu.iteye.com/blog/1477774 )2. Java NIO(参考 :http://weixiaolu.iteye.com/blog/1479656 )3. Java网络编程 目录: 一.RPC协议二.ipc.RPC源码分析三.ipc.Client源码分析四.ipc.Server源码分析 分析:  一.RPC协议 在分析协议之前,我觉得我们很有必要先

Hadoop中的RPC机制

1.  RPC--远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据.在OSI网络通信模型中,RPC跨越了传输层和应用层.RPC使得开发包括网络分布式多程序在内的应用程序更加容易. 2.  RPC采用客户机/服务器模式.请求程序就是一个客户机,而服务提供程序就是一个服务器.首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息.在服务器端,进程保持睡眠状

理解Android系统的进程间通信原理(二)----RPC机制

理解Android系统中的轻量级解决方案RPC的原理,需要先回顾一下JAVA中的RMI(Remote Method Invocation)这个易于使用的纯JAVA方案(用来实现分布式应用).有关RMI的相关知识,可以通过下图来归纳: Android中的RPC也是参考了JAVA中的RMI方案,这里我们再详细了解一下RPC的实现过程. Android中的RPC机制是为了实现一个进程使用另一个进程中的远程对象,它使用了Android自己的AIDL(接口定义语言),使用户很方便地定义出一个接口作为规范,

Hadoop学习<四>--HDFS的RPC通信原理总结

这里先写下自己学习RPC的笔记总结,下面将详细介绍学习过程: RPC(remote procedure call) 不同java进程间的对象方法的调用. 一方称作服务端(server),一方称作客户端(client). server端提供对象,供客户端调用的,被调用的对象的方法的执行发生在server端. RPC是hadoop框架运行的基础. 通过rpc小例子获得的认识? 1. 服务端提供的对象必须是一个接口,接口extends VersioinedProtocal 2. 客户端能够的对象中的方