阅读量:13
CentOS环境下HDFS数据存储原理
1. 核心架构:主从模式
HDFS采用主从(Master/Slave)架构,是数据存储与管理的基础框架。其中,NameNode作为主节点,负责管理文件系统的命名空间(如目录结构、文件权限、块与DataNode的映射关系);DataNode作为从节点,负责存储实际的数据块,并执行数据的读写、复制等操作。这种架构实现了控制与执行的分离,确保集群的高效运行。
2. 数据分块:分布式存储的基础
HDFS将大文件切割为固定大小的数据块(Block),作为存储的最小单元。默认块大小为128MB(Hadoop 2.x及以上版本),可通过hdfs-site.xml中的dfs.blocksize参数调整。分块的优势在于:突破单机内存限制,支持并行处理(多个块可同时读写),提升大规模数据的处理效率。
3. 数据冗余:高可靠的保障
为防止数据丢失,HDFS采用多副本机制(默认每个块存储3个副本)。副本会分布在不同的DataNode上(通常跨机架),即使某个节点故障,系统也能从其他副本恢复数据。副本系数可通过dfs.replication参数修改,适用于不同重要性的数据(如热数据可增加副本数)。
4. NameNode:元数据管理中心
NameNode是HDFS的“大脑”,其核心职责包括:
- 元数据维护:记录文件系统的命名空间(如目录树、文件属性)、文件与数据块的映射关系(如
file1.txt由块1、块2组成)、数据块的副本分布等; - 客户端交互:处理客户端的读写请求(如“写入
file1.txt”“读取file2.txt的第3块”); - 副本管理:监控DataNode的心跳(每3秒一次),若节点宕机,触发副本恢复流程(从其他副本复制到健康节点)。
5. DataNode:数据存储与执行者
DataNode是HDFS的“工人”,主要职责包括:
- 数据存储:将数据块以文件形式存储在本地磁盘(路径由
dfs.datanode.data.dir配置,可指定多个目录实现多磁盘存储); - 读写操作:接收客户端的读写请求,直接处理数据块的读取(返回数据)或写入(存储数据并反馈成功);
- 状态报告:定期向NameNode发送心跳信号(表明存活状态)和块报告(汇报存储的块列表、副本状态),确保NameNode掌握集群的最新状态。
6. 数据写入流程:管道式复制
客户端写入数据的流程如下:
- 客户端向NameNode发起写请求,NameNode返回可写入的DataNode列表(按副本数要求选择,如3副本则返回3个节点);
- 客户端将文件分块,通过**管道(Pipeline)**依次写入DataNode(如块1先写入DataNode1,再由DataNode1复制到DataNode2,最后到DataNode3);
- 每个DataNode写入成功后,向客户端发送确认;
- 所有块写入完成后,客户端通知NameNode,NameNode更新元数据(记录块的分布)。
7. 数据读取流程:就近并行读取
客户端读取数据的流程如下:
- 客户端向NameNode发起读请求,NameNode返回文件块的位置信息(优先返回离客户端最近的DataNode,如同一机架内的节点);
- 客户端直接与DataNode通信,并行读取多个数据块(如块1从DataNode1读取,块2从DataNode2读取);
- 客户端将读取的数据块按顺序合并,还原为完整文件。
8. 数据恢复:副本机制的容错能力
当DataNode宕机或数据块损坏时,HDFS通过副本机制实现自动恢复:
- NameNode通过心跳检测到节点故障,标记该节点为“宕机”;
- NameNode从其他健康节点获取故障块的副本;
- 将副本复制到其他健康节点,恢复副本数至默认值(如3副本则复制到2个新节点);
- 若副本数不足(如用户修改副本系数为2),NameNode会自动创建额外副本,确保数据冗余。
9. 存储策略:优化性能与成本
HDFS支持多种存储策略,以平衡性能与成本:
- 异构存储:支持将数据存储在不同介质(如SSD、机械硬盘),可根据数据访问频率选择(如热数据存SSD,冷数据存机械硬盘);
- 机架感知(Rack Awareness):将数据块的副本分布在不同机架的节点上,避免机架故障导致数据丢失,同时提升跨机架读取的性能;
- 存储策略配置:通过
dfs.storage.policy参数设置(如HOT(默认,热数据)、COLD(冷数据)、WARM(温数据)),针对不同数据类型优化存储。