对HDFS的读流程和写流程的理解

本文详细解析了HDFS的文件写入和读取流程。在写文件时,客户端通过DISTRIBUTEDFILESYSTEM发起创建文件请求,经过NAMENODE的权限检查后,建立数据流管道,将数据分块并逐级复制到多个DATANODE。在读文件时,客户端通过FILESYSTEM对象打开文件,NAMENODE提供DATANODE地址,FSDATAINPUTSTREAM管理读取,按距离优先顺序从DATANODE读取数据块,直至文件读取完毕。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.HDFS写文件流程图
在这里插入图片描述
二.HDFS写文件流程
(1)调用客户端的对象DISTRIBUTEDFILESYSTEM()的CREATE方法;
(2)DISTRIBUTEDFILESYSTEM会发起对NAMENODE的一个RPC连接,请求创建一个文件,。NAMENODE会执行各种各样的检查,确保要创建的文件不存在,并且客户端有创建文件的权限。如果检查通过,NAMENODE会创建一个文件(在EDITS中),否则创建失败,客户端抛异常IOEXCEPTION。
(3)DISTRIBUTEDFILESYSTEM返回一个FSDATAOUTPUTSTREAM对象给客户端用于写数据。FSDATAOUTPUTSTREAM封装了一个DFSOUTPUTSTREAM对象负责客户端跟DATANODE以及NAMENODE的通信。
(4)FSDATAOUTPUTSTREAM将数据切分,并请求NAMENODE返回一个DATANODE列表来存储当前BLOCK副本。然后这些DATANODE会生成一个数据流管道,我们假设副本集参数被设置为3,那么这个数据流管道中就有三个DATANODE节点。
(5)首先FSOUTPUTSTREAM会将文件块向数据流管道中的第一个DATANODE节点写数据,第一个DATANODE接收文件块后会把文件块写向数据流管道中的第二个节点,同理,第二个节点接收保存数据块后会将数据块写向数据流管道中的第三个DATANODE节点。
(6)当第三各DATANODE节点数据库写入成功后,会向第二个DATANODE节点发送数据写入成功的确认消息,第二个DATANODE节点收到第三个的确认消息后会向第一个DATANODE节点发送数据写入成功的确认消息。当三个节点都确认数据写入成功后DATANODE会向FSOUTPUTSTREAM对象发送ACK PACKETS,最后会调用对象的CLOSE()方法。

三.HDFS读文件流程图

在这里插入图片描述

四.HDFS读文件流程
(1)客户端通过FILESYSTEM对象的OPEN方法打开希望读取的文件,DISTRIBUTEDFILESYSTEM对象通过RPC调用NAMENODE,以确保文件起始位置。(对于每个BLOCK,NAMENODE返回存有该副本的DATANODE地址。这些DATANODE根据它们与客户端的距离来排序。如果客户端本身就是一个DATANODE,并保存有相应BLOCK一个副本,会从本地读取这个BLOCK数据)。
(2)DISTRIBUTEDFILESYSTEM返回一个FSDATAINPUTSTREAM对象给客户端读取数据。该类封装了DFSINPUTSTREAM对象,该对象管理着DATANODE和NAMENODE的I/O,用于给客户端使用。
(3)客户端调用FSDATAINPUTSTREAM对象的READ()方法 会去与第一个块的最近的DATANODE进行READ,读取完后,会CHECK,假如SUCCESSFUL,会关闭 与当前 DATANODE通信; (假如CHECK FAIL,会记录失败的块+DATANODE信息,下次就不会读取;那么会去该块的第二个 DATANODE地址读取) 然后去第二个块的最近的Datanode上的进行读取,check后,会关闭与此datanode的通信。假如block列表读取完了,文件还未结束,那么FileSystem会从Namenode获取下一批的block的列表。
(4)客户端将文件块读取完整后,会调用FSDataInputStream的close()方法,关闭输入流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值