HDFS原理和架构
AI生成声明: 本文档由AI辅助生成,旨在提供HDFS原理和架构的完整指南。
HDFS是Hadoop的分布式文件系统,理解其原理和架构对于掌握大数据存储至关重要。
核心问题
HDFS设计目标
容错性
- 硬件故障是常态
- 自动检测和恢复
- 数据副本机制
流式数据访问
- 适合一次写入多次读取
- 高吞吐量
- 不适合低延迟访问
大数据集
- 支持大文件
- 支持大量文件
- 扩展到数百个节点
架构组件
NameNode(主节点)
- 管理文件系统命名空间
- 存储元数据(fsimage + edits)
- 控制客户端访问
DataNode(从节点)
- 存储实际数据块
- 定期向NameNode报告
- 执行数据块的创建、删除、复制
SecondaryNameNode
- 辅助NameNode
- 定期合并fsimage和edits
- 非高可用方案
数据存储机制
块(Block)
- 默认大小:128MB(Hadoop 2.x)
- 为什么大块:减少寻址开销
- 块抽象:简化存储管理
副本机制
- 默认副本数:3
- 副本放置策略:
- 第一个副本:本地机架
- 第二个副本:不同机架
- 第三个副本:同第二个副本的机架
机架感知
- 目的:优化网络带宽使用
- 策略:优先同机架,跨机架备份
- 配置:通过脚本配置机架信息
读写流程
写流程
- 客户端向NameNode请求写入
- NameNode检查权限和空间
- NameNode返回DataNode列表
- 客户端写入数据到DataNode
- DataNode之间复制数据
- 客户端确认写入完成
读流程
- 客户端向NameNode请求读取
- NameNode返回数据块位置
- 客户端从最近的DataNode读取
- 如果读取失败,尝试其他副本
高可用(HA)
NameNode HA
方案:
- Active NameNode:处理请求
- Standby NameNode:同步元数据
- Zookeeper:故障检测和切换
- JournalNode:共享存储
故障转移:
- 自动检测故障
- 自动切换到Standby
- 保证服务不中断
常见面试题
HDFS为什么不适合小文件?
- 元数据占用内存大
- 寻址开销大
- 建议合并小文件
HDFS的副本放置策略?
- 第一个副本:本地机架
- 第二个副本:不同机架
- 第三个副本:同第二个副本的机架
NameNode的元数据存储?
- fsimage:文件系统镜像
- edits:操作日志
- 定期合并