`

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);
}
 
6
5
分享到:
评论

相关推荐

    Hadoop-0.20.0-HDFS+MapReduce+Hive+HBase十分钟快速入门

    6. **Hive**:提供了一个数据仓库工具,允许用户通过类似SQL的HiveQL语言对存储在Hadoop中的大量数据进行查询和汇总,简化了数据分析过程。 7. **MapReduce**:实现了分布式数据处理的编程模型,允许开发者编写处理...

    Hadoop自己的Rpc框架使用Demo

    Hadoop的RPC框架提供了许多高级特性,包括安全性、负载均衡、故障恢复和协议升级等。它使用了高效的序列化技术,如Writable和Protobuf,以减少网络传输的开销。此外,RPC框架还支持异步调用,可以在处理大量并发请求...

    Hadoop-MindMap 技术全解

    MapReduce是Hadoop中用于处理大规模数据集的编程模型。它将计算任务分解为Map(映射)和Reduce(归约)两个阶段,并通过Shuffle操作在两个阶段之间进行数据传输。在Map阶段,数据被分成不同的块,由不同的Map任务...

    基于Java的高性能RPC框架 nfs-rpc.zip

    Java平台上的RPC框架有很多,如Hadoop的Hadoop RPC、Apache Thrift、Google的gRPC等,而“nfs-rpc”则是一个专门基于Java开发的高性能RPC框架。这个框架的设计目标是提供高效、稳定、易用的跨网络服务调用能力。 ...

    Hadoop单节点部署指导

    - **Oozie**:一个工作流调度系统,用于管理Hadoop中的复杂工作流程。 #### 六、总结 通过上述步骤,我们可以成功地在一个单节点上部署并配置Hadoop环境。这不仅有助于深入理解Hadoop的工作原理和技术特点,还能够...

    Hadoop源码分析(client部分)

    ### Hadoop源码分析(client部分) #### Hadoop概述 Hadoop是一个开源的分布式存储与计算框架,由Apache基金会维护。它为用户提供了处理和存储海量数据的能力,并且能够运行在低成本的商品硬件集群上。Hadoop的...

    (完整版)hadoop常见笔试题答案.docx

    1. Hadoop的核心组成部分是HDFS(Hadoop Distributed File System),它是一个分布式文件系统,其中datanode是数据的实际存储节点,而namenode则是HDFS的元数据管理器,负责文件系统的命名空间和数据块映射。...

    Hadoop在雅虎的应用

    - **2004-2005年:**Hadoop最初作为Apache Lucene项目的一部分进行原型开发。 - **2006年1月:**Hadoop正式成为Lucene的一个子项目。 - **2008年1月:**Hadoop发展成熟,成为一个独立的顶级Apache项目。 - **最新...

    【最新推荐】hadoop,开题报告-优秀word范文 (8页).pdf

    随着大数据技术的不断发展,Hadoop 将继续演进,集成更多高级功能,如实时流处理、图形处理等。同时,随着云原生和容器技术的崛起,Hadoop 将更加适应云计算环境,为用户提供更灵活、更高效的解决方案。此外,Hadoop...

    Hadoop的工作原理

    7. **Hadoop集群和网络**:在文档《深入理解Hadoop集群和网络》中,可能涵盖了网络拓扑设计、数据通信机制(如RPC、TCP/IP)、集群的扩展性和高可用性策略等内容。 8. **实际应用**:Hadoop广泛应用于互联网广告...

    hadoop学习资料地址

    - 介绍了如何在Hadoop环境中使用Thrift进行RPC通信。 3. **Solomons的博客**:`http://solomons.javaeye.com/blog/277784` - 归纳总结了Hadoop 0.19版本的新特性和改进之处。 4. **Killme2008的博客**:`...

    《Hadoop 数据分析平台》课程毕业测试题

    - **解释**: Hive是一种数据仓库工具,它提供了一个SQL-like查询语言(HiveQL),可以方便地查询存储在Hadoop中的大规模数据集。因此,正确答案是C:hive。 ### 7. 安装Hadoop的要求 - **知识点**: 在安装Hadoop时...

    hive2.1.1 + hadoop2.6.0jdbc驱动

    这个压缩包包含了Hive 2.1.1和Hadoop 2.6.0的关键组件,但不包括Hive所有库中的jar包。 描述中提到,这个压缩包内有15个jar文件,这些文件在Eclipse环境中已经经过测试,证明它们是功能完整的。这意味着你可以使用...

    hadoop 安全设计

    除了核心组件之外,Hadoop生态系统中的高级服务也需要遵循相同的安全原则。例如,Oozie工作流调度器需要支持用户认证和授权机制,确保只有授权用户能够创建、运行或监控工作流。 #### 结论 通过上述措施,Hadoop...

    Google +Hadoop使用编程

    **HDFS (Hadoop Distributed File System)** 是Hadoop中的分布式文件系统,类似于GFS,但针对Hadoop进行了优化。HDFS同样将文件分割成块,并将这些块分布存储在网络中的不同节点上。它支持数据块的多副本存储,以...

    李建伟:Hadoop新技术介绍

    在【部分内容】中,我们看到一系列与Hadoop相关的技术和组件的罗列,这些都是Hadoop生态系统中的重要组成部分: - Spark:是一个用于大规模数据处理的开源框架,它利用内存计算,提供了一个更快的数据处理速度。...

    Hadoop技术内幕 深入理解MapReduce架构设计与实现原理 高清完整中文版PDF下载

    - **RPC框架**:负责处理不同节点间的通信,确保任务能够在分布式环境中正常执行。 - **JobTracker**:作为主控节点,负责接收用户的作业提交请求,并将作业分配给TaskTracker执行。 - **TaskTracker**:作为工作...

    HADOOP 相关项目简介

    以上就是从 Hadoop 相关项目的标题、描述、标签以及部分内容中提取的关键知识点。这些项目覆盖了数据序列化、列式存储、日志收集、数据迁移以及数据分析等多个方面,共同构成了 Hadoop 生态系统的核心组件。

Global site tag (gtag.js) - Google Analytics