1. HDFS的架构
HDFS(Hadoop Distributed File System)采用主从架构,由一个NameNode(主节点)和多个DataNode(从节点)组成。NameNode负责管理数据块映射信息(如文件名、文件目录、权限、块位置等)并配置副本策略,而DataNode负责存储实际的数据块。Secondary 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.3版本后),基于最佳传输损耗理论。较大文件块减少寻址时间,提高传输效率。
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重启时加载过多日志。