您现在的位置 >> Hadoop教程 >> Hadoop实战 >> 专题  
 

日志分析之hadoop的rpc,什么是rpc,怎么用rpc

【作者:Hadoop实战专家】【关键词:服务端 客户机 客户端 】 【点击:86298次】【2013-11-2】
首先,客户机调用进程发送 一个有进程参数的调用信息到服务进程,然后等待应答信息。客户端调用线程以阻塞同步的方式发起RPC连接及RPC调用,将参数等信息发送给Listener,然后等待Connection接收响应返回。  

相关热门搜索:hbase 客户端 hbase 客户端软件 spark客户端下载

大数据标签:hadoop hdfs bigdata

集群发生异常,日志查看,经常看到rpc,不知道rpc什么或则说不了解rpc.rpc是查看日志基础,如果想看懂日志,知道异常发生在什么地方,发生的原因是什么,rpc是我们必须了解的。下面给大家讲一下什么是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来完成。

一些细节
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);
}

大数据系列相关文章:

最新评论
遇到你2014-09-10 01:40:47
@Larry Potter 你用户名是多少
justoniy2014-09-09 11:31:38
不需要是指的什么、只替换master中的iib包?
秋之白华2014-09-08 11:25:22
了解时事才能更好的写代码啊
夏雨春风2014-09-08 02:00:29
有些公司已经开始了
潘潘2014-09-07 04:26:26
???这个要包含?
 
  • Hadoop生态系统资料推荐