HDFS 核心组件详解:NameNode、DataNode 与 Secondary NameNode 原理解析

HDFS 核心组件详解:NameNode、DataNode 与 Secondary NameNode 原理解析

​ HDFS(Hadoop Distributed File System)作为大数据平台的核心存储系统,其稳定运行离不开三个关键组件:NameNode、DataNode 和 Secondary NameNode。本文将深入剖析这三个组件的职责、协作机制与运行原理,帮助读者全面理解 HDFS 的架构基础和容错设计。

一、NameNode:HDFS 的“大脑”

1.1 NameNode 简介

NameNode 是 HDFS 的主控节点,主要负责维护整个文件系统的 元数据(Metadata),包括:

  • 文件与目录结构(类似 Unix 文件系统);
  • 文件与块(Block)的映射关系;
  • 每个块所存储在哪些 DataNode 上;
  • 副本管理与策略;
  • 客户端请求的权限控制与操作调度。

简单来说,NameNode 不存储实际数据,而是存储“数据的目录与索引”。

在这里插入图片描述

功能

  • 接受客户端的读写服务
  • NameNode存放文件与Block的映射关系
  • DataNode存放Block与DataNode的映射关系

在这里插入图片描述

  • 保存文件的元数据信息
  • 文件的归属
  • 文件的权限
  • 文件的大小时间
  • Block信息,但是block的位置信息不会持久化,需要每次开启集群的时候DN上报
系统启动时
  • NN关机的时候是不会存储任意的Block与DN的映射信息

  • DN启动的时候,会将自己节点上存储的Block信息汇报给NN

  • NN接受请求之后重新生成映射关系

  • Block–DN3

  • 如果某个数据块的副本数小于设置数,那么NN会将这个副本拷贝到其他节点

集群运行中

NameNode 工作机制

  • 每次客户端发起如“创建文件、删除文件、追加文件”等操作时,NameNode 都会记录一条 edits;
  • 为避免 edits 日志过大、恢复时间过长,NameNode 会定期触发 Checkpoint(检查点),将 fsimage 与 edits 合并;
  • NameNode 周期性接收 DataNode 的心跳与块报告(Block Report);
  • 通过心跳机制判断 DataNode 是否健康,是否需要重新分配副本。

NN与DN保持心跳机制,三秒钟发送一次

<property>
<description>Determines datanode heartbeat interval in
seconds.</description>
<name>dfs.heartbeat.interval</name>
<value>3</value>
</property>
<property>
<name>heartbeat.recheck.interval</name>
<value>300000</value>
</property>
  • 如果客户端需要读取或者上传数据的时候,NN可以知道DN的健康情况

  • 可以让客户端读取存活的DN节点

如果DN超过三秒没有心跳,就认为DN出现异常

- 不会让新的数据读写到DataNode
- 客户访问的时候不提供异常结点的地址
  • 如果DN超过10分钟+30秒没有心跳,那么NN会将当前DN存储的数据转存到其他节点

  • 超时时长的计算公式为:

  • timeout = 2 * heartbeat.recheck.interval + 10 * dfs.heartbeat.interval。

  • 而默认的heartbeat.recheck.interval 大小为5分钟,dfs.heartbeat.interval默认为3秒。

性能

  • NameNode为了效率,将所有的操作都在内存中完成
  • NameNode不会和磁盘进行任何的数据交换

问题:

  • 数据的持久化
  • 数据保存在内存中,掉电易失

1.2 NameNode 存储结构

NameNode 使用两类文件来存储元数据:

  • fsimage(文件系统镜像):保存文件系统的静态快照;
  • edits(编辑日志):记录自上次 fsimage 保存以来的所有修改操作。

启动时,NameNode 会加载 fsimage,并按顺序应用 edits 日志,恢复当前文件系统状态。

二、DataNode:HDFS 的“工人节点”

2.1 DataNode 简介

DataNode 是 HDFS 中负责实际 存储数据块(Block) 的节点,是系统的数据提供者。

每个 DataNode 会:

  • 接收 NameNode 的指令:存储、删除、复制数据块;
  • 接收客户端上传的数据,并将数据以块的形式写入本地磁盘;
  • 向 NameNode 定期发送:
    • 心跳(Heartbeat):表明自己“活着”;
    • 块报告(Block Report):报告自己拥有的块列表。

功能

  1. 存放的是文件的数据信息和验证文件完整性的校验信息

  2. 数据会存放在硬盘上

  3. 1m=1条元数据 1G=1条元数据 NameNode非常排斥存储小文件,一般小文件在存储之前需要进行压缩 汇报

  4. 启动时

  5. 汇报之前先验证Block文件是否被损坏

  6. 向NN汇报当前DN上block的信息

  7. 运行中

  8. 向NN保持心跳机制 客户可以向DN读写数据,

  9. 当客户端读写数据的时候,首先去NN查询file与block与dn的映射

  10. 然后客户端直接与dn建立连接,然后读写数据

2.2 数据写入机制(Pipeline 写入)

写入流程大致如下:

  1. 客户端请求 NameNode 创建文件;
  2. NameNode 分配多个数据块及对应 DataNode 列表(副本);
  3. 客户端将数据流写入第一个 DataNode;
  4. 第一个 DataNode 通过 流水线复制(pipeline replication) 同时写入下一个 DataNode,依此类推;
  5. 所有副本写入成功后,NameNode 更新元数据。

2.3 数据读取机制

  1. 客户端请求 NameNode 获取文件块的分布信息;
  2. 客户端选择最近的 DataNode 读取数据块;
  3. 多个块在客户端顺序拼接成完整文件。

2.4 块副本与容错

  • 每个数据块默认有 3 副本,分布在不同 DataNode 上;
  • NameNode 监控副本数量与状态,若某副本丢失,自动在其他节点上复制;
  • HDFS 优先写入与读取本地副本,提高性能(数据本地性)。

三、Secondary NameNode:元数据清理者

3.1 Secondary NameNode 的角色

许多初学者误认为 Secondary NameNode 是 NameNode 的热备节点,其实并非如此。

Secondary NameNode 的职责是 定期帮助 NameNode 合并 fsimage 与 edits,生成新的元数据快照,防止 edits 文件过大导致 NameNode 恢复时间过长。

3.2 工作机制

  1. 定期从 NameNode 拉取当前的 fsimage 与 edits;
  2. 在本地合并为新的 fsimage(checkpoint);
  3. 将新的 fsimage 推送回 NameNode;
  4. NameNode 在下次启动时优先加载该快照。

3.3 常见误解

误解正确认识
Secondary NameNode 是 NameNode 热备❌错误。它不能接管服务,仅负责 checkpoint 合并。
Secondary NameNode 能独立恢复文件系统❌错误。它仅保存快照文件,恢复需手动干预。
不配置 Secondary NameNode 不影响运行✅短期内不会影响,但长时间运行将导致 edits 文件过大,影响性能与恢复。

四、三者协同机制总结

组件名称职责描述
NameNode管理元数据、调度数据块、维护文件系统结构
DataNode实际存储数据块、定期汇报状态、响应客户端与 NameNode 指令
Secondary NN帮助合并 fsimage 与 edits,减轻 NameNode 负担
  • |
    | NameNode | 管理元数据、调度数据块、维护文件系统结构 |
    | DataNode | 实际存储数据块、定期汇报状态、响应客户端与 NameNode 指令 |
    | Secondary NN | 帮助合并 fsimage 与 edits,减轻 NameNode 负担 |

三者配合构建出 HDFS 的核心能力:可扩展、高容错、强一致性的大数据分布式文件存储系统

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值