HDFS(Hadoop Distributed File System)的运行流程主要包括以下部分:
1. 文件写入流程:
- 客户端请求:用户通过Hadoop客户端程序向NameNode发起文件写入请求,包括文件名、副本数等信息。
- 验证与授权:NameNode首先检查该操作是否具有权限,并判断目标目录是否存在。
- 块分配:NameNode确定数据块应该存储在哪些DataNode上,通常会按照机架感知策略选择最少3个不同的节点来存储同一份数据块的副本。
- 管道建立:客户端收到NameNode返回的数据块存储位置后,开始与第一个DataNode建立连接,并依次创建一个数据流管道,即第一个DataNode接收数据后转发给下一个DataNode,直到最后一个副本节点。
- 数据传输:客户端将文件数据以数据块的形式顺序写入到这个管道中。每个数据块会在Pipeline中的各个DataNode间逐级复制。
- 确认写入:当所有副本都成功写入后,DataNode会发送确认信号给客户端和NameNode,NameNode更新元数据信息。
2. 文件读取流程:
- 客户端请求:用户通过客户端向NameNode请求读取某个文件。
- 查找数据块位置:NameNode根据文件名查询元数据信息,找到所需文件的所有数据块及其对应的DataNode地址列表。
- 连接DataNode:客户端根据NameNode提供的信息,直接与包含所需数据块的DataNode建立连接。
- 数据读取:客户端从最近或可用性最高的DataNode开始读取数据块内容,如果需要,可以从其他副本节点进行读取以提高读取速度或者容错能力。
- 合并数据:客户端接收到所有的数据块后,将其按顺序拼接成完整的文件内容并返回给用户。
3. 元数据管理与维护
- FsImage和EditLog:NameNode使用FsImage存储文件系统的完整镜像,而EditLog记录对文件系统的所有更改操作。
- checkpoint机制:Secondary NameNode(在Hadoop 2.x版本后为Checkpoint节点)定期合并FsImage和EditLog生成新的FsImage,减轻NameNode重启时加载数据的压力,保证系统的稳定性和高可用性。
- 心跳检测与恢复:NameNode通过接收来自DataNode的心跳和块报告来监控集群状态,一旦发现DataNode失效,将自动触发数据块的重新复制过程,以维持数据的冗余度。