|
2012-12-07 14:17:04
Hadoop实战-中高级部分 之 Hadoop RPC 浏览(16543)|评论(2) 交流分类:Java|笔记分类: Hadoop实战-中……
第一部分:什么是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来完成。
服务端
客户端
一些细节
1.
根据
RPC Server
的
IP
与
PORT
从连接池中拿
Con
2.
如果为空,新建连接放到连接池
3.
创建
Socket
建立到
Server
的连接
4.
创建输入输出流对象
5.
将序列化的参数发到服务端
6.
等待服务端响应
•客户端发起的RPC调用是同步的,而服务端处理RPC调用是异步的。客户端调用线程以阻塞同步的方式发起RPC连接及RPC调用,将参数等信息发送给Listener,然后等待Connection接收响应返回。
•Listener负责接收RPC连接和RPC数据,当一个Call的数据接收完后,组装成Call,并将Call放入由Handler提供的Call队列中。
•Handler线程监听Call队列,如果Call队列不为空,则按FIFO方式取出Call,并转为实际调用,以非阻塞方式将响应发回给Connection,未发送完毕的响应交给Responder处理。
第三部分:使用Hadoop RPC
流程
•实现VersionedProtocol
•继承VersionedProtocol ,定义Server(即NameNode)
•实现Clinet(即DataNode)
实现VersionedProtocol
public interface
RPC
Protocol
Test
extends VersionedProtocol {
public Text println(Text t); } 相关笔记推荐
精品视频课程推荐
Hadoop实战-初级部分视频教程
深入浅出学Zookeeper
云计算综合实战项目视频教程(更新版)
Hadoop实战-中高级部分视频教程
评论(2)
2楼
superny1985
2012-12-07
引用
谢谢分享!
学习hadoop...
请登录后评论 登录
|