Hadoop实战-中高级部分 之 Hadoop RPC,hadoop实战部分rpc
关注我们的微博
Hadoop RestFul Hadoop HDFS原理1 Hadoop HDFS原理2 Hadoop作业调优参数调整及原理 Hadoop HA Hadoop MapReduce高级编程 Hadoop IO Hadoop MapReduce工作原理 Hadoop 管理 Hadoop 集群安装 Hadoop 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来完成。 服务端
| 结构 | 功能 |
| Server.Listener | RPC Server的监听者,用来接收RPC Client的连接请求和数据,其中数据封装成Call后PUSH到Call队列。 |
| Server.Handler | RPC Server的Call处理者,和Server.Listener通过Call队列交互。 |
| Server.Responder | RPC Server的响应者。Server.Handler按照异步非阻塞的方式向RPC Client发送响应,如果有未发送出的数据,交由Server.Responder来完成。 |
| Server.Connection | RPC Server数据接收者。提供接收数据,解析数据包的功能。 |
| Server.Call | 持有客户端的Call信息。 |
| 结构 | 功能 |
| Client.ConnectionId | 到RPC Server对象连接的标识 |
| Client.Call | Call调用信息。 |
| Client.ParallelResults | Call响应。 |
| RPC.Invoker | 对InvocationHandler的实现,提供invoke方法,实现RPC Client对RPC Server对象的调用。 |
| RPC.Invocation | 用来序列化和反序列化RPC Client的调用信息。(主要应用JAVA的反射机制和InputStream/OutputStream) |
public Text println(Text t);
}
转载请注明出处【 http://sishuok.com/forum/blogPost/list/0/5968.html】
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。