HDFS详解②
HDFS 文章目录HDFS4 HDFS的数据流4.1 HDFS写数据流程4.1.1 剖析文件写入4.1.2 网络拓扑-节点距离计算4.1.3 机架感知(副本存储节点选择)4.2 HDFS读数据流程5 NameNode和SecondaryNameNode(面试开发重点)5.1 NN和2NN工作机制1. 第一阶段:NameNode启动2. 第二阶段:Secondary NameNode工作5.2 Fsimage和Edits解析5.2.1. 概念5.2.2 oiv查看Fsimage文件5.2.3 oev查看Edits文件5.3 CheckPoint时间设置5.4 NameNode故障处理 4 HDF 【HDFS详解②】 Hadoop分布式文件系统(HDFS)是大数据处理的核心组件,它提供了高容错性、可扩展性和高效的数据访问能力。本文将深入探讨HDFS的两个关键方面:数据流管理和NameNode与SecondaryNameNode的运作机制。 ### 4.1 HDFS写数据流程 #### 4.1.1 剖析文件写入 1. 客户端首先通过Distributed FileSystem模块向NameNode发起文件上传请求,检查文件是否已存在以及父目录是否可用。 2. NameNode回应客户端是否允许上传。 3. 客户端请求指定第一个Block的DataNode列表。 4. NameNode返回3个DataNode(如dn1、dn2、dn3)作为副本存放点。 5. 客户端建立一个到dn1、dn2、dn3的通信管道,并开始上传数据。 6. DataNodes逐级接收并转发数据包,同时对客户端发送确认响应。 7. 当一个Block传输完毕,客户端会重复此过程,请求上传下一个Block。 #### 4.1.2 网络拓扑 - 节点距离计算 在HDFS中,NameNode选择距离数据源最近的DataNode来存储副本,通过计算两节点到达最近公共祖先的距离总和来确定“距离”。 #### 4.1.3 机架感知(副本存储节点选择) HDFS支持机架感知,这意味着在选择副本存储位置时,会尽量将副本分布在不同机架的DataNode上,以提高容错性和带宽利用率。 ### 4.2 HDFS读数据流程 1. 客户端通过Distributed FileSystem向NameNode请求文件下载,NameNode提供包含文件Block位置的DataNode列表。 2. 客户端选择一个DataNode开始读取,通常选择离自己最近的。 3. 选定的DataNode开始传输数据给客户端。 4. 客户端接收数据并在本地缓存,然后写入目标文件。 ### 5. NameNode和SecondaryNameNode(面试开发重点) #### 5.1 NN和2NN工作机制 NameNode负责管理HDFS的元数据,包括文件系统命名空间和文件Block映射信息。元数据存于内存中,为提高持久化和一致性,采用了FsImage和Edits文件: - **FsImage**:初始的元数据快照,保存在磁盘上。 - **Edits**:记录所有对元数据的修改,以追加方式写入,避免影响性能。 **第一阶段:NameNode启动** - 初始启动时,NameNode创建Fsimage和Edits。 - 日常启动时,NameNode加载Fsimage和Edits到内存。 **第二阶段:Secondary NameNode工作** - SecondaryNameNode负责定期合并Fsimage和Edits,生成新的Fsimage,减少NameNode重启时恢复元数据的时间。 - 合并过程不干扰NameNode正常工作,确保高效运行。 #### 5.2 Fsimage和Edits解析 - **概念**:Fsimage代表HDFS的当前状态,而Edits记录所有更改。 - **oiv查看Fsimage**:Hadoop提供的工具 Offline Image Viewer (oiv) 可以查看Fsimage的详细结构。 - **oev查看Edits**:Offline Edits Viewer (oev) 用于分析Edits文件的内容。 #### 5.3 CheckPoint时间设置 CheckPoint时间设置是为了控制何时执行Fsimage和Edits的合并,以保持元数据的最新状态。 #### 5.4 NameNode故障处理 NameNode故障时,通常依赖SecondaryNameNode来恢复元数据。如果SecondaryNameNode也无法正常工作,可能需要手动恢复或使用备份策略。 总结来说,HDFS的高效运行依赖于其精心设计的数据流机制和NameNode的元数据管理策略。理解这些核心概念对于优化HDFS性能和解决故障至关重要。