文档章节

Hadoop实战-中高级部分 之 Hadoop RPC

2
 2k10
发布于 2015/03/23 18:01
字数 1333
阅读 69
收藏 3

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)

 

 

一些细节

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);

}


© 著作权归作者所有

2
粉丝 28
博文 89
码字总数 167777
作品 0
广州
私信 提问
加载中

评论(0)

Hadoop 2.X 从入门到精通系列视频课程套餐

购买大数据Hadoop课程套餐,享八五折优惠!! 套餐地址:http://edu.51cto.com/pack/view/id-806.html 赵强老师博客地址:http://collen7788.blog.51cto.com/ Avro是一个通用的序列化数据结构形...

collen7788
2016/08/07
0
0
部署Spark2.2集群(on Yarn模式)

版权声明:欢迎转载,请注明出处,谢谢。 https://blog.csdn.net/boling_cavalry/article/details/86795338 机器规划 本次实战用到了三台CentOS7的机器,身份信息如下所示: 要注意的地方: ...

博陵精骑
2019/02/09
0
0
大数据经典学习路线(及供参考)之 一

1.Linux基础和分布式集群技术 学完此阶段可掌握的核心能力: 熟练使用Linux,熟练安装Linux上的软件,了解熟悉负载均衡、高可靠等集群相关概念,搭建互联网高并发、高可靠的服务架构; 学完此...

柯西带你学编程
2018/05/22
0
0
2016中国大数据技术大会( BDTC )

连续成功举办九届的中国大数据大会见证了中国大数据技术生态系统的建立、发展和演变。 中国大数据技术大会(BDTC)的前身是Hadoop中国云计算大会(Hadoop in China,HiC)。从2008年仅60余人...

活动家
2016/11/01
10
0
年薪百万的大数据开发工程师的入门书单(收藏)

前言 你们是不是都听过一句话:谷歌比你自己更了解你 事实上,这句话并不是毫无根据,我们周边的一切无不体现数据的重要性,你想想,我们对自己的看法会受到多种主观和客观的因素影响,但谷歌...

风火大数据
2018/07/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

一款提升IT运维工作效率的工具,你值得拥有!

IT运维的工作内容主要是负责服务器硬件配置、独立主机或虚拟化产品的开通维护、服务器日常运行监控和管理等,具体的要看企业对这个岗位的要求。 而像运维这样的岗位,我个人是推荐可以使用一...

欢乐马在开源
23分钟前
44
0
IDEA 多线程Debug

一、问题描述 在idea中的进行调试时,代码中有多线程,想对线程中的代码进行跟踪,代码如下: for (int i = 0; i < 5; i++) { final int index = i; exec...

Airship
27分钟前
19
0
jenkins 插件加速

参考:https://my.oschina.net/VASKS/blog/3106314 主要是自己创建一个nginx, 让jenkins从清华源下载。 以下是创建nginx的Dockerfile Dockerfile FROM nginxADD nginx.conf /etc/nginx/ngi......

杰仪
28分钟前
43
0
五分钟自学编程:怎样才能学好笔试面试最爱考察的算法

原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者。 本文思维导图 什么是算法 上回我们有一篇文章,讲述了作为一个新人程序员,如何学习数据结构这门课程,其实呢,数据结构和...

黄小斜
31分钟前
24
0
面试题 11:旋转数组的最小数字

题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋...

Oaki
37分钟前
50
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部