Hadoop学习之HDFS写流程

本文详细介绍了HDFS的写流程,包括客户端如何发起写请求、NameNode如何验证权限及记录操作、DataNode如何构建数据流管道及数据块的写入确认过程等关键步骤。

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

HDFS写流程图
这里写图片描述

假设有个bigdata.log文件需要上传到HDFS系统根目录,使用以下命令

hadoop fs -put bigdata.log /

整个写流程如下
1、客户端会调用DistributedFileSystem对象的create()方法,与NameNode进行RCP通信。

2、NameNode接收到用户的写文件的RPC请求后,首先进行各种检查。如用户是否有创建权限和该文件是否已存在,检查通过后才会创建一个文件,并将操作记录到editlog中,然后DistributedFileSystem会将DFSOutputStream对象包装在FSDataOutStream实例中,返回客户端;否则文件创建失败并且给客户端抛IOException

3、客户端会开始写文件,FSOutputStream会将文件进行切块。然后向NameNode请求适合存放文件块的DataNode列表,然后这些DataNode会生成一个数据流管道,我们假设副本集参数被设置为3,那么这个数据流管道中就有三个DataNode节点。

4、首先FSOutputStream会将文件块向数据流管道中的第一个DataNode节点写数据,第一个DataNode接收文件块后会把文件块写向数据流管道中的第二个节点,同理,第二个节点接收保存数据块后会将数据块写向数据流管道中的第三个DataNode节点

5、当第三各DataNode节点数据库写入成功后,会向第二个DataNode节点发送数据写入成功的确认消息,第二个DataNode节点收到第三个的确认消息后会向第一个DataNode节点发送数据写入成功的确认消息。当三个节点都确认数据写入成功后DataNode会向FSOutputStream对象发送ack packets,最后会调用对象的close()方法。

注:假如客户端就是集群中某一个DataNode节点,那么第一个数据块会优先存储在本DataNode节点上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值