HDFS 简介
HDFS (Hadoop Distributed File System) 是一个分布式文件系统,用于存储文件,采用目录树结构来定位文件。它由多个服务器组成,每个服务器在集群中扮演不同的角色。
- 适合一次写入,多次读取的场景。
- 文件创建、写入和关闭后,通常不再修改。
1. HDFS的架构
HDFS(Hadoop Distributed File System)采用主从架构,由一个NameNode(主节点)和多个DataNode(从节点)组成。NameNode负责管理HDFS命名空间和数据块映射信息(如文件名、文件目录层次结构、权限、块位置等)并配置副本策略,而DataNode负责存储实际的数据块。Secondary NameNode辅助NameNode进行元数据的检查点操作。
1. NameNode (主节点)
- 角色:HDFS 的管理者和控制中心。
-
功能:
- 管理 HDFS 的名称空间,维护文件和目录的结构。
- 配置和管理副本策略,确定每个文件的副本数量和存放位置。
- 管理数据块(Block)的信息,例如数据块的位置和状态。
- 处理客户端的读写请求,协调文件的存储和访问。
2. DataNode (节点)
- 角色:HDFS 的工作节点,执行实际的数据存储和处理。
-
功能:
- 存储实际的数据块,负责数据的持久化。
- 执行数据块的读写操作,根据 NameNode 的指令进行数据的管理。
3. Client (客户端)
- 角色:与 HDFS 交互的用户或应用程序。
-
功能:
- 在将文件上传到 HDFS 时,将文件切分为多个数据块。
- 与 NameNode 交互,以获取文件的位置信息。
- 与 DataNode 交互以进行数据的读写操作。
- 提供命令和工具用于管理 HDFS,例如格式化 NameNode。
- 执行对 HDFS 的增、删、改等操作。
4. Secondary NameNode (辅助 NameNode)
- 角色:辅助 NameNode,提供一定的冗余和备份。
-
功能:
- 定期合并 Fsimage 和 Edits 文件,从而减轻 NameNode 的负担。
- 在紧急情况下(如 NameNode 故障)可以辅助恢复 NameNode 的状态,但并非其直接替代。
2. HDFS的读写流程
2.1 写流程
- 客户端向NameNode发起写请求,提供文件名和大小等信息。
- NameNode将文件划分为数据块,记录副本位置并返回给客户端。
- 客户端根据位置信息,将数据块发送给对应的DataNode。
- DataNode接收数据块后,将其存储到本地磁盘。
- 在写入时,DataNode先写入临时文件,完成后转为永久文件。
- DataNode定期向NameNode报告数据块信息。
2.2 读流程
- 客户端访问NameNode,查询元数据,获得数据块位置列表。
- 选择就近的DataNode服务器,建立输入流请求。
- DataNode向输入流中写数据,以packet校验。
- 关闭输入流。
3. HDFS的优缺点
3.1 优点
- 高容错:数据块复制存储,节点故障时自动恢复。
- 高吞吐:并行处理数据块,高效读写和批处理。
- 适合大文件:将大文件分块存储,适合大规模数据处理。
- 廉价机器构建:可以构建在廉价的机器上,有多副本机制提升其可靠性。
3.2 缺点
- 延迟高:不适合低延时数据访问。
- 不支持并发写入:一个文件只能有一个写入进程,不允许多个线程同时写。
- 仅支持随机修改:仅支持数据追加,不支持文件的随机修改。
- 小文件存储不高效:浪费存储空间和元数据开销。
使用场景:大规模数据存储和计算、日志分析。
4. HDFS默认存储块大小
HDFS默认块大小为128MB(2.x版本后),基于最佳传输损耗理论。文件块越大,寻址时间越短,但磁盘的传输时间越长。在一次传输中,寻址时间占用总传输时间的1%时,传输效率最佳。
切分规则:
第一片:0-128M,第二片:128-256M,第三片:256-300M每次切片的时候,都要判断切完剩下的部分是否大于块的1.1倍,大于时候,继续按照规定切块,小于1.1倍时候,将剩下的文件大小归到一个切片上去
5. HDFS的心跳机制
DataNode每隔3秒向NameNode发送心跳信号,报告状态和存储信息。如10分钟未收到心跳信号,NameNode认为节点不可用,并重新分配数据块副本。
6. HDFS的负载均衡
HDFS的负载均衡机制确保数据在DataNode上的分布均匀。当DataNode存储利用率过高时,系统自动将数据迁移至空闲的DataNode。通过手动命令或配置参数调整负载均衡策略。
7. Secondary NameNode
Secondary NameNode辅助NameNode进行元数据的检查点操作。定期从NameNode获取fsimage和edits文件,合并生成新的fsimage文件,发送回NameNode,以减小edits文件大小,防止NameNode重启时加载过多日志。
8. HDFS 的机架感知
在 HDFS 中,通过机架感知来配置副本存放策略,不仅提高了数据访问的效率,还增强了系统的容错能力和数据的安全性。这种策略适合大规模分布式文件系统,有效应对数据丢失和访问延迟问题。具体如下:
副本存放策略
- 第一副本:存放在本机(即客户端请求的节点)。
- 第二副本:存放在同机架内的其他服务器节点。
- 第三副本:存放在不同机架的一个服务器节点上。
好处
-
提高访问速度:如果本机的数据损坏或丢失,客户端可以快速从同机架的相邻节点获取数据,访问速度明显快于跨机架访问。
-
增强数据安全性:如果本机所在的机架出现问题,由于副本分散存储在不同机架内,确保数据不会因单一机架故障而丢失,客户端仍能访问到数据。