hdfs读写数据的工作机制

本文概述了HDFS的工作机制,包括NameNode和DataNode的角色。详细介绍了HDFS的写数据流程,从客户端创建文件到数据块的分布式存储和复制。同时,解析了HDFS的读数据流程,描述了客户端如何从NameNode获取文件元信息,通过DataNodes逐个读取数据块以获取完整文件。

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

1.1 概述

1. HDFS集群分为两大角色:NameNodeDataNode  (Secondary Namenode)

2. NameNode负责管理整个文件系统的元数据

3. DataNode 负责管理用户的文件数据块

4. 文件会按照固定的大小(blocksize=128M)切成若干块后分布式存储在若干台datanode

5. 每一个文件块可以有多个副本,并存放在不同的datanode

6. Datanode会定期向Namenode汇报自身所保存的文件block信息,而namenode则会负责保持文件的副本数量

7. HDFS的内部工作机制对客户端保持透明,客户端请求访问HDFS都是通过向namenode申请来进行

 

1.2 HDFS写数据流程

1.2.1 概述

客户端要向HDFS写数据,首先要跟namenode通信以确认可以写文件并获得接收文件blockdatanode,然后,客户端按顺序将文件逐个block传递给相应datanode,并由接收到blockdatanode负责向其他datanode复制block的副本


1.2.3 详细步骤解析

1.初始化FileSystem,客户端调用create()来创建文件

2.FileSystemRPC调用元数据节点,在文件系统的命名空间中创建一个新的文件,元数据节点首先确定文件原来不存在,并且客户端有创建文件的权限,然后创建新文件。

3.FileSystem返回DFSOutputStream,客户端用于写数据,客户端开始写入数据。

4.DFSOutputStream将数据分成块,写入data queuedata queueData Streamer读取,并通知元数据节点分配数据节点,用来存储数据块(每块默认复制3)。分配的数据节点放在一个pipeline里。Data Streamer将数据块写入pipeline中的第一个数据节点。第一个数据节点将数据块发送给第二个数据节点。第二个数据节点将数据发送给第三个数据节点。

5.DFSOutputStream为发出去的数据块保存了ack queue,等待pipeline中的数据节点告知数据已经写入成功。


 

1.3. HDFS读数据流程

1.3.1 概述

客户端将要读取的文件路径发送给namenodenamenode获取文件的元信息(主要是block的存放位置信息)返回给客户端,客户端根据返回的信息找到相应datanode逐个获取文件的block并在客户端本地进行数据追加合并从而获得整个文件

1.3.2详细步骤图


1.3.3 详细步骤解析

1.初始化FileSystem,然后客户端(client)FileSystemopen()函数打开文件

2.FileSystemRPC调用元数据节点,得到文件的数据块信息,对于每一个数据块,元数据节点返回保存数据块的数据节点的地址。

3.FileSystem返回FSDataInputStream给客户端,用来读取数据,客户端调用streamread()函数开始读取数据。

4.DFSInputStream连接保存此文件第一个数据块的最近的数据节点,data从数据节点读到客户端(client)

5.当此数据块读取完毕时,DFSInputStream关闭和此数据节点的连接,然后连接此文件下一个数据块的最近的数据节点。

6.当客户端读取完毕数据的时候,调用FSDataInputStreamclose





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值