rpczq,rpc有什么好处

一、 RPC基础概念1.1 RPC基础概念 RPC,即Remote Procdure Call,中文名:远程过程调用;  (1)它允许一台计算机程序远程调用另外

1.RPC基本概念

1.1 RPC基本概念

RPC,远程过程调用,中文名称:远程过程调用。

(1)它允许一台计算机程序远程调用另一台计算机上的子例程,而无需了解底层网络通信的细节。因此,它常用于分布式网络通信。

RPC 协议依赖于传输协议(例如TCP 或UDP)的存在来在通信程序之间传送信息数据。在OSI网络通信模型中,RPC跨越传输层和应用层。 RPC 促进了涉及网络分布式多程序的应用程序的开发。

(2)Hadoop中所有进程之间的交互都是通过RPC进行的,包括Namenode和Datanode、Jobtracker和Tasktracker之间的直接连接。

e31d367265e045b3a00b60f4b598df33~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717814952&x-signature=33KVOpPqJxvshIQZMtA3j7OYsM8%3D

因此,我们可以说Hadoop的运行是基于RPC的。

1.1 RPC的主要特点

(1)透明性:远程调用另一台机器上的程序对用户来说与调用本地方法是一样的。

(2)高性能:RPC服务器可以同时处理来自客户端的多个请求。

(3)可控性:jdk已经提供了RPC框架(RMI),但是PRC框架太重,可控功能很少,所以Hadoop RPC实现了自定义的PRC框架。

RPC基本流程

7d03a9acf8804bce9dba30a4e65a58db~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717814952&x-signature=eW1QRTxL5lUZw%2B3c%2B7bJJKzHSv8%3D

(1)RPC采用C/S模式。

(2) 客户端向服务器发送带有参数的请求消息。

(3) 服务器收到请求后,根据发送的参数调用相应的程序,并将计算结果发送给客户端。

(4)客户端收到结果后继续执行。

1.1 Hadoop的RPC机制

与其他RPC 框架一样,Hadoop RPC 分为四个部分。

(1)序列化层:Clent和服务器之间发送的信息使用Hadoop提供的序列化类或自定义的Writable类型。

(2)函数调用层:Hadoop RPC通过动态代理和Java反射实现函数调用。

(3)网络传输层:Hadoop RPC采用基于TCP/IP的套接字机制。

(4)服务器端框架层:RPC服务器采用Java NIO,采用事件驱动的I/O模型,提高RPC服务器的并发处理能力。

Hadoop RPC 在整个Hadoop 中得到广泛应用,客户端、数据节点和名称节点之间的所有通信都依赖于它。示例:使用HDFS 时,通常使用FileSystem 类,该类内部有一个DFSClient 对象。该对象处理NameNode。在运行时,DFSClient 创建本地NameNode 代理,还可以操纵该代理通过网络远程调用NameNode 上的方法并返回值。

fb26cf49917549f79f6456f5713ae592~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717814952&x-signature=M0g8xs58NikZOuZi08Npk4mJBKo%3D

1.1 Hadoop RPC技术

(1)动态代理

动态代理可以提供对另一个对象的访问,同时隐藏有关实际对象的某些事实。代理对象向客户端隐藏实际对象。 Java开发包目前提供了对动态代理的支持,但目前仅支持接口的实现。

(2)动态加载反射——个类。

(3)系列化

(4)非阻塞异步IO(NIO)

1.如何使用RPC

2.1 Hadoop RPC对外提供的接口

Hadoop RPC主要提供两个外部接口(参见类org.apache.hadoop.ipc.RPC):

(1) public static T ProtocolProxy T getProxy/waitForProxy(.)

构造一个客户端代理对象(该对象实现特定协议)向服务器发送RPC请求。

(2)公共静态Server RPC.Builder(配置).build()

为处理客户端发送的请求的协议实例(实际上是Java 接口)构造一个服务器对象。

2.2 使用Hadoop RPC的四个主要步骤

(1)定义RPC协议

RPC协议是客户端和服务器之间的通信接口,定义了服务器提供的服务接口。

(2)RPC协议的实现

Hadoop RPC 协议通常是您必须实现的Java 接口。

(3)搭建并启动RPC SERVER

直接使用静态类Builder构建一个RPC服务器,并通过调用函数start()启动服务器。

(4)搭建RPC客户端并发送请求

使用静态方法getProxy构造一个客户端代理对象,并通过该代理对象直接调用远端方法。

2. RPC应用机制

3.1 定义RPC协议

定义IProxyProtocol 通信接口并声明Add() 方法,如下所示。

e4a44057f9d944c7be571f5324dc2e66~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717814952&x-signature=IDkm%2BoRq68wn4X9xi%2F4i%2Fxvr2%2FQ%3D

以下是一些需要记住的事情:

(1)Hadoop中所有自定义的RPC接口都必须继承VersionedProtocol接口,该接口描述了协议版本信息。

(2) 默认情况下,不同版本号的RPC客户端和服务器端无法通信,因此客户端和服务器端通过版本号来标识。

3.2 实现RPC协议

Hadoop RPC 协议通常是您必须实现的Java 接口。 IProxyProtocol 接口的一个简单实现是:

26284b6f29594e8f87ecb609e45779a2~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717814952&x-signature=qtQrSgmangz5F6nGBcmngidNge0%3D

//注意:这里返回的版本号必须与客户端提供的版本号一致。

d54f5fc04d1b4155870ff72256a03850~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717814952&x-signature=C953Q0T%2Brb9gvZ3CRVGm%2B4mHSfc%3D

这里实现的Add方法非常简单,是一个加法操作。看看效果,下面是控制台输出的语句: “我被叫了!”

3.3 搭建RPC服务器并启动服务

这里,Server对象是通过RPC静态方法getServer获取的,如下代码所示。

9ef4bb1b29e6448b926a8d7f1077de5b~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717814952&x-signature=LAf7B9n7cLGtIKvoNTTHzU1pSLc%3D

284a0006677842169c11552064991346~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717814952&x-signature=lCHPAYC1YPRzkn5DEX9%2BwleN98A%3D

这段代码的核心在第5行的RPC.getServer方法中。该方法有四个参数。第一个参数是要调用的Java对象,第二个参数是服务器的地址,第三个参数是服务器端口。服务器。获得服务器对象后,启动服务器。这样服务器就可以在指定端口上监听客户端请求。此时,服务器处于监听状态,不断等待客户端请求的到来。

3.4 构建RPC客户端并执行请求

这里,使用静态方法getProxy 或waitForProxy 构造了一个客户端代理对象,并通过该代理对象直接调用远端方法,如下所示。

05fb51f65bd946aabbc7137b3f7581f6~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717814952&x-signature=nkAYMUp%2Fw%2BHdevT6UlloHQNijJo%3D

//注意:这里传递的版本号必须与代理匹配

9feffc2507ea4327ad38dec984907050~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717814952&x-signature=Jxenk9wxsZjtxV1stNCbYOGg0i0%3D

上面代码的核心是RPC.waitForProxy(),它有四个参数:第一个参数是被调用的接口类,第二个参数是客户端版本号,第三个参数是客户端版本号。返回的代理对象是服务器对象的代理,内部使用java.lang.Proxy实现。

经过以上四个步骤,我们已经使用Hadoop RPC 构建了一个非常高效的客户端/服务器网络模型。

3.5 查看执行结果

(1)启动服务器并开始监听客户端请求。

29b4564f429b4f19ad743f362c4ee3f7~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717814952&x-signature=2rB%2BVawzGci9ngsKA0Uhaj2mFzU%3D

(2)启动客户端,开始向服务器发送请求。

870b5a9945f048e4846d042c08602a3e~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717814952&x-signature=49qSYxf3%2FH1UyB0HgJWNqdYIqXk%3D

(3) 检查状态,看看服务器是否正在被调用。

9252be471a2b4cb79f99b5f7188ed2fb~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717814952&x-signature=zj8JqJE917ETML1JTcRGdaNy2oY%3D

总结:从上面的RPC调用中我们可以看到,在客户端调用的业务类的方法都是在业务类的接口中定义的。该接口实现VersionedProtocal 接口。

(4)在命令行中运行jps命令,查看输出信息,如下图所示。

638553fe8e654e70b0ce7289d6f08b44~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717814952&x-signature=kqFrKmI%2F44HIyCfg4X51Qs64PaI%3D

在上图中,您可以看到一个名为“MyServer”的Java 进程。这个进程就是我们刚刚运行的RPC的服务器类MyServer。因此,您可以假设在设置Hadoop 环境时,您还运行了此命令来检查是否启动了所有Hadoop 相关进程。

总结:因此,我们可以得出结论,Hadoop启动时产生的5个Java进程也是RPC服务器。

接下来,你可以看到NameNode实际上创建了一个RPC服务器,如下图所示。

1b8e3432238444a1a024951fbb678665~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717814952&x-signature=y01gqkVhEFgRFfSGl0FLZ9ccyW4%3D

原创文章,作者:小条,如若转载,请注明出处:https://www.sudun.com/ask/85051.html

(0)
小条's avatar小条
上一篇 2024年6月1日 上午10:48
下一篇 2024年6月1日 上午10:49

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注