HDFS(Hadoop Distributed File System)是Apache Hadoop项目的核心子系统之一,专为在廉价硬件上运行而设计的分布式
·
HDFS(Hadoop Distributed File System)是Apache Hadoop项目的核心子系统之一,专为在廉价硬件上运行而设计的分布式、高容错、可扩展的文件系统。它采用主从(Master-Slave)架构,主要由以下组件构成:
- NameNode(主节点):管理文件系统的命名空间(Namespace),维护文件元数据(如文件名、目录结构、权限、块位置映射等),不存储实际数据;它通过编辑日志(EditLog)和镜像文件(FsImage)实现元数据持久化,并依赖Secondary NameNode(或更现代的CheckPoint Node / Standby NameNode in HA)辅助合并与备份。
- DataNode(从节点):负责实际存储数据块(默认128 MB或256 MB),定期向NameNode发送心跳(heartbeat)和块报告(block report),执行读写、复制、删除等数据操作。
- Client:通过HDFS API或命令行工具(如
hdfs dfs -ls)与NameNode交互获取元数据,再直接与DataNode通信进行数据读写,实现“控制流与数据流分离”。
HDFS关键特性包括:
✅ 数据冗余(默认3副本)保障高可用与容错
✅ 流式数据访问(一次写入、多次读取,不支持随机写/修改)
✅ 支持超大文件(TB/PB级)、高吞吐量,适合批处理场景
❌ 不适用于低延迟访问、大量小文件(会压垮NameNode内存)、频繁修改或并发多写
典型工作流程示例(写入):
Client向NameNode请求上传文件 → NameNode检查权限与命名空间,返回可用DataNode列表(基于机架感知策略)→ Client按管道(pipeline)方式将数据块逐节点传输(如DN1→DN2→DN3),各节点确认后回传ACK → 写完后通知NameNode更新元数据。
# 常用HDFS命令示例
hdfs dfs -mkdir /input
hdfs dfs -put localfile.txt /input/
hdfs dfs -ls /input
hdfs dfs -cat /input/localfile.txt
NameNode的单点故障(SPOF)问题通过HDFS High Availability(HA)机制得到根本性解决。其核心思想是部署两个NameNode:一个Active,一个Standby,两者状态实时同步,并借助外部组件实现自动故障检测与快速切换,从而消除单点依赖。
HA架构关键组件与工作原理如下:
-
Active & Standby NameNode
- Active NameNode处理所有客户端请求(如打开、关闭、重命名文件等)和DataNode心跳/块报告;
- Standby NameNode保持热备状态:它不处理客户端请求,但实时加载并维护与Active完全一致的命名空间状态,可随时接管服务。
-
共享编辑日志(Shared Edit Log)
- 为避免FsImage和EditLog不同步,HA摒弃了传统Secondary NameNode,改用共享存储系统(如Quorum Journal Manager, QJM 或 NFS)来持久化EditLog;
- Active NameNode将每次元数据变更写入多个JournalNode(通常≥3个,满足多数派写入);
- Standby NameNode持续从JournalNodes读取EditLog并应用到本地内存中的FsImage,实现命名空间准实时同步(毫秒级延迟)。
-
ZooKeeper协调与故障转移(Failover)
- ZooKeeper集群负责:
✅ 健康监测:每个NameNode运行一个ZKFailoverController(ZKFC)进程,定期向ZooKeeper发送心跳;
✅ 主备选举:首次启动或故障时,ZKFC通过ZooKeeper分布式锁竞争成为Active;
✅ 自动故障检测与切换:若Active宕机或失联(ZKFC心跳超时),ZooKeeper触发failover流程,原Standby执行以下操作:
① 等待确保Active已退出(fencing,防止脑裂)——通过SSH/Kill脚本、共享存储互斥锁或QJM写隔离实现;
② 加载最新EditLog完成状态回放;
③ 切换为Active并开始提供服务(通常在10–30秒内完成,支持配置优化至秒级)。
- ZooKeeper集群负责:
-
DataNode双注册(Dual Registration)
- DataNode同时向Active和Standby NameNode发送心跳与块报告,确保Standby始终掌握最新数据拓扑,缩短接管后恢复时间。
✅ HA带来的优势:
- 消除SPOF,保障集群高可用(99.9%+ SLA);
- 支持计划内维护(如滚动升级NameNode)而不停服;
- 故障恢复快,元数据一致性由QJM强一致性保证。
⚠️ 注意事项:
- HA不解决NameNode内存瓶颈(小文件过多仍会耗尽堆内存),需配合联邦(Federation)横向扩展命名空间;
- JournalNode需奇数部署(推荐3或5个)以容忍部分节点故障;
- fencing策略必须严格配置,否则可能引发“双Active”导致数据损坏。

更多推荐

所有评论(0)