HDFS存储原理

本文以漫画形式介绍了HDFS的工作原理,包括Client、Namenode和Datanode的角色与功能。在HDFS中,文件按块存储,写入时遵循“一次写入多次读取”模型,数据块会根据距离客户端的远近进行排序以便读取。HDFS具有高容错性,通过副本策略确保数据安全,当节点或数据损坏时,能通过心跳和数据块报告进行检测和修复。此外,还讨论了如何在故障情况下保证读写容错。

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

整理下漫画,非常适合初学者理解

  • 角色出演

    这里写图片描述
    如上图所示,HDFS存储相关角色与功能如下:

Client:客户端,系统使用者,调用HDFS API操作文件;与NN交互获取文件元数据;与DN交互进行数据读写。

Namenode:元数据节点,是系统唯一的管理者。负责元数据的管理;与client交互进行提供元数据查询;分配数据存储节点等。

Datanode:数据存储节点,负责数据块的存储与冗余备份;执行数据块的读写操作等。

  • 写入数据
    1.发送写数据请求

这里写图片描述
HDFS中的存储单元是block。文件通常被分成64或128M一块的数据块进行存储。与普通文件系统不同的是,在HDFS中,如果一个文件大小小于一个数据块的大小,它是不需要占用整个数据块的存储空间的。http://www.tuicool.com/articles/MBz26b
2.文件切分
这里写图片描述
3.DATANODE分配
这里写图片描述
这里写图片描述
4.数据写入
这里写图片描述
这里写图片描述
5.写入完成

### HDFS 存储原理与分布式文件系统架构 HDFS(Hadoop Distributed File System)是一种为大规模数据存储和处理设计的分布式文件系统。其核心目标是提供高容错性和高吞吐量的数据访问能力,同时能够在低成本硬件上运行[^1]。 #### 1. 数据块(Block)划分 HDFS 将大文件划分为固定大小的数据块(通常为 128MB 或 256MB),并将这些数据块分布存储在集群中的不同节点上。这种划分方式不仅简化了数据管理,还提高了系统的并行处理能力和容错能力[^3]。 #### 2. 主从架构 HDFS 采用主从架构(Master-Slave Architecture),主要由两个关键组件组成:NameNode 和 DataNode。 - **NameNode**:作为主节点,负责管理文件系统的元数据(如文件目录结构、数据块映射关系等)。它记录每个数据块存储在哪几个 DataNode 上,并维护整个文件系统的健康状态[^1]。 - **DataNode**:作为从节点,负责实际存储数据块,并定期向 NameNode 汇报自身状态和存储信息[^2]。 #### 3. 数据复制与容错机制 为了保证数据的可靠性和可用性,HDFS 会对每个数据块进行多副本存储(默认为三副本)。这些副本会被分散存储在不同的 DataNode 上,以避免单点故障。如果某个 DataNode 出现故障,NameNode 会检测到该情况,并自动将丢失的数据块重新复制到其他健康的节点上[^1]。 #### 4. 写入流程 当客户端需要向 HDFS 写入数据时,具体流程如下: 1. 客户端向 NameNode 发起写请求,NameNode 返回分配的数据块编号及目标 DataNode 列表。 2. 客户端按照数据块大小将文件切分为多个部分,并依次写入到指定的 DataNode。 3. 每个 DataNode 接收数据后,会将数据复制到其他 DataNode,完成副本创建[^2]。 #### 5. 读取流程 当客户端需要从 HDFS 读取数据时,具体流程如下: 1. 客户端向 NameNode 查询目标数据块的位置信息。 2. NameNode 返回包含数据块的 DataNode 地址列表。 3. 客户端直接与最近的 DataNode 建立连接,获取所需数据。 #### 6. 数据本地化 HDFS 强调数据本地化(Data Locality),即尽量让计算任务靠近数据所在的节点执行。这样可以减少网络传输开销,提高整体性能[^2]。 ```python # 示例代码:使用 Python 的 PyHDFS 库操作 HDFS from pyhdfs import HdfsClient client = HdfsClient(hosts='localhost:9870') client.create('/user/test.txt', b'Hello, HDFS!', overwrite=True) data = client.open('/user/test.txt').read() print(data.decode('utf-8')) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值