Hadoop HDFS-NameNode(nn)详细介绍

部署运行你感兴趣的模型镜像

作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

图片

中间件,我给它的定义就是为了实现某系业务功能依赖的软件,包括如下部分:

Web服务器

代理服务器

ZooKeeper

Kafka

RabbitMQ

Hadoop HDFS(本章节)

前面我们介绍了HDFS的安装,在单机版本里面一共启动了3个java进程:

NameNode,DataNode,SecondaryNameNode,下面我们就来分别介绍这3个进程,今天是NameNode。

NameNode 是 Hadoop 分布式文件系统(HDFS)的核心组件,承担着整个文件系统的元数据管理与集群协调功能,是 HDFS 实现分布式存储和高效访问的 “中枢神经”。其设计聚焦于元数据的精准维护与快速响应,以下从核心职责、元数据特性、工作机制、瓶颈与解决方案四个维度展开详解。

一、核心职责

元数据全量管理:元数据是描述文件系统结构的数据,包括:

  • 文件与目录的命名空间(如 /test/test01 的层级关系);

  • 文件与数据块的映射(每个文件由哪些数据块组成,默认块大小 128MB);

  • 数据块的副本信息(每个块存储在哪些 DataNode 上,默认 3 个副本);

  • 文件属性(权限、创建时间、修改时间等)。

  • NameNode 需实时维护这些信息的一致性,确保客户端对文件系统的认知与实际状态一致。

客户端请求处理:所有涉及元数据的操作(如创建文件、删除目录、查询文件位置)必须经过 NameNode 处理:

  • 读请求:客户端发起文件读取时,NameNode 验证权限后,返回该文件所有数据块的存储地址(优先就近节点);

  • 写请求:客户端创建文件时,NameNode 检查路径合法性与权限,分配数据块的存储节点(遵循机架感知策略,平衡可靠性与网络开销),并在写入完成后更新元数据。

DataNode 状态监控通过 “心跳机制” 与 DataNode 保持通信:

  • DataNode 每 3 秒发送一次心跳,报告自身存活状态及存储的数据块列表;

  • 若超过 10 分钟未收到心跳,NameNode 判定该节点失效,立即触发数据块副本修复(从其他存活节点复制块,确保副本数满足预设值)。

二、元数据的存储与持久化

NameNode 的元数据存储采用 “内存 + 磁盘” 双重机制,兼顾效率与可靠性:

内存存储:所有元数据常驻内存,以哈希表、树等数据结构组织,支持微秒级的查询与修改(内存访问速度是磁盘的万倍以上)。这要求 NameNode 配备充足内存,通常每 1000 万个文件 / 块需 1GB 内存(例如,管理 1 亿个块需约 100GB 内存)。

磁盘持久化:内存中的元数据需持久化到磁盘以防丢失,依赖两个关键文件:

  • FsImage:元数据的完整快照(如某一时刻的命名空间状态),定期生成;

  • EditLog:记录 FsImage 生成后所有元数据的变更操作(如 “创建文件 A”“删除块 B”),每次元数据修改先写入 EditLog(保证原子性),再更新内存。

两者的关系类似数据库的 “全量备份 + 增量日志”:NameNode 启动时,通过加载 FsImage 并回放 EditLog 重建内存元数据;运行中,EditLog 持续追加,FsImage 则通过合并操作定期更新(避免 EditLog 过大导致启动缓慢)。

三、工作机制的关键细节

命名空间操作的原子性:任何元数据变更(如重命名文件)均为原子操作:要么完全执行,要么不执行。这通过 EditLog 的顺序写入与内存更新的原子性保证,避免因故障导致元数据不一致。

块分配策略:为新数据块分配存储节点时,NameNode 遵循 “机架感知” 原则:

  • 第一个副本:优先存客户端所在节点(若客户端在集群内);

  • 第二个副本:存与第一个副本不同机架的节点(防机架故障);

  • 第三个副本:存与第二个副本同机架的不同节点(平衡网络传输量)。

此策略在确保数据可靠性的同时,减少跨机架数据传输开销。

元数据的一致性维护:客户端的元数据操作需经 NameNode 确认后才生效:例如,客户端删除文件时,NameNode 先在 EditLog 记录 “删除” 操作,再从内存中移除该文件的元数据,最后返回成功响应。若操作中途失败(如 NameNode 宕机),重启后通过回放 EditLog 可恢复到一致状态。

运维小路

一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!

关注微信公众号《运维小路》获取更多内容。

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值