RPC简介与hdfs读过程与写过程简介

Stella981
• 阅读 584

1.RPC简介

Remote Procedure Call 远程过程调用协议

  RPC——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。

  RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息的到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。

  hadoop的整个体系结构就是构建在RPC之上的(见org.apache.hadoop.ipc)

2.HDFS读过程:

1. 初始化FileSystem,然后客户端(client)用FileSystem的open()函数打开文件
2. FileSystem用RPC调用元数据节点,得到文件的数据块信息,对于每一个数据块,元数据节点返回保存数据块的数据节点的地址。
3. FileSystem返回FSDataInputStream给客户端,用来读取数据,客户端调用stream的read()函数开始读取数据。
4. DFSInputStream连接保存此文件第一个数据块的最近的数据节点,data从数据节点读到客户端(client)
5. 当此数据块读取完毕时,DFSInputStream关闭和此数据节点的连接,然后连接此文件下一个数据块的最近的数据节点。
6. 当客户端读取完毕数据的时候,调用FSDataInputStream的close函数。
7. 在读取数据的过程中,如果客户端在与数据节点通信出现错误,则尝试连接包含此数据块的下一个数据节点。
8. 失败的数据节点将被记录,以后不再连接。

RPC简介与hdfs读过程与写过程简介

getfs流程:(获取filesystem的流程)

FileSystem.get --> 通过反射实例化了一个DistributedFileSystem --> new DFSCilent()把他作为自己的成员变量
    在DFSClient构造方法里面,调用了createNamenode,使用了RPC机制,得到了一个NameNode的代理对象,就可以和NameNode进行通信了
    
    FileSystem --> DistributedFileSystem --> DFSClient --> NameNode的代理

RPC简介与hdfs读过程与写过程简介

getfs的代码详细流程:

详细代码过程:

RPC简介与hdfs读过程与写过程简介

 RPC简介与hdfs读过程与写过程简介

RPC简介与hdfs读过程与写过程简介

 open流的主要代码

简单过程

RPC简介与hdfs读过程与写过程简介

详细工程:

 RPC简介与hdfs读过程与写过程简介

RPC简介与hdfs读过程与写过程简介

 3.HDFS写过程

1. 初始化FileSystem,客户端调用create()来创建文件
2. FileSystem用RPC调用元数据节点,在文件系统的命名空间中创建一个新的文件,元数据节点首先确定文件原来不存在,并且客户端有创建文件的权限,然后创建新文件。
3. FileSystem返回DFSOutputStream,客户端用于写数据,客户端开始写入数据。
4. DFSOutputStream将数据分成块,写入data queue。data queue由Data Streamer读取,并通知元数据节点分配数据节点,用来存储数据块(每块默认复制3块)。分配的数据节点放在一个pipeline里。Data Streamer将数据块写入pipeline中的第一个数据节点。第一个数据节点将数据块发送给第二个数据节点。第二个数据节点将数据发送给第三个数据节点。
5. DFSOutputStream为发出去的数据块保存了ack queue,等待pipeline中的数据节点告知数据已经写入成功。
6.  当客户端结束写入数据,则调用stream的close函数。此操作将所有的数据块写入pipeline中的数据节点,并等待ack queue返回成功。最后通知元数据节点写入完毕。
7. 如果数据节点在写入的过程中失败,关闭pipeline,将ack queue中的数据块放入data queue的开始,当前的数据块在已经写入的数据节点中被元数据节点赋予新的标示,则错误节点重启后能够察觉其数据块是过时的,会被删除。失败的数据节点从pipeline中移除,另外的数据块则写入pipeline中的另外两个数据节点。元数据节点则被通知此数据块是复制块数不足,将来会再创建第三份备份。

 RPC简介与hdfs读过程与写过程简介

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
爱写码 爱写码
2年前
为RPC而生的t-io企业集群版的msg服务器tio-msg-demo你应该感兴趣
概念解释什么是RPC(RemoteProcedureCall)远程过程调用,是一种通过网络从远程计算机程序上请求服务,实现某个业务,但是不需要具体了解底层网络技术的协议。tio把程序中对外实现通信的各个协议模块进行了打包处理成一个盒子,上层应用对外通信就只要对接盒子的接口,而不必关心盒子里面的内容,RPC服务要对外实现远程调用,首先要跟tio通信,再到远
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
RPC、RMI、HTTP、REST的区别
RPC、RMI、HTTP、REST的区别RPC:远程服务调用(RemoteProcedureCall),加上Protocol后可以称为远程过程调用协议,可以用不同的语言实现,可以借用HTTP协议或者其他协议来实现,一般都是通过基于TCP/IP的自定义协议实现。HTTP协议和TCP/
Wesley13 Wesley13
2年前
RPC调用(架构)和HTTP调用(架构)的区别
我是接触到了Dubbo,才接触到RPC服务的。它处于的网络模型的传输层,而http处于应用层,RPC处于更底层所以效率更高!本文简单地介绍一下两种形式的C/S架构,先说一下他们最本质的区别,就是RPC主要是基于TCP/IP协议的,而HTTP服务主要是基于HTTP协议的,我们都知道HTTP协议是在传输层协议TCP之上的,所以效率来看的话,RPC当然是要更胜
Wesley13 Wesley13
2年前
RPC 定义 和 原理
一、RPC  1.RPC是什么  RPC(RemoteProcedureCallProtocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了
Wesley13 Wesley13
2年前
NFS 服务器搭建
NFS(网络文件系统)用于Unix/Linux之间的文件共享,NFS在文件传送过程中依赖与RPC(远程过程调用)协议。NFS本身是没有提供信息传送的协议和功能。只要用到NFS的地方都需要启动RPC服务,不论是NFS的服务端还是客户端。在启动NFS服务之前,首先要启动RPC服务(CentOS5是portmap服务,CentOS6.6以后的版本是rp
Wesley13 Wesley13
2年前
RPC的简单实现
RPC(RemoteProcedureCall)—远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。RPC采用客户机/
Stella981 Stella981
2年前
Rpc基础 原理 框架
一.RPC的原理1.RPC是什么RPC(RemoteProcedureCallProtocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC
API 小达人 API 小达人
4个月前
Eolink Apikit「 零代码」快速发起 RPC 接口自动化测试
RPC(RemoteProcedureCall)远程过程调用,是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC的核心思想是将远程服务抽象成一个接口,客户端通过调用这个接口,就可以实现对远程服务的访问。EolinkApikit支持多协议,RPC、DUBBO、HTTP、REST、Websocket、gRPC、TCP、UDP、SOAP、HSF等。零代码快速发起RPC接口自动化测试,可以根据RPC接口文档自动生成测试用例,开发者只需简单修改即可使用。