HDFS组成架构
NameNode
- 管理HDFS的名称空间
- 配置副本策略,fsimage和edit
- 管理数据块block映射信息
- 处理客户端读写请求
DataNode
- 存储实际的数据块
- 执行数据块的读写操作
Client
- 文件切分,split成block
- 与NameNode交互,获取数据块位置信息
- 与DataNode交互,读写或写入数据
- 通过Shell管理HDFS,操作HDFS
SecondaryNameNode
- 合并镜像和编辑日志,fsimage和edit,帮助NameNode备份
- 紧急情况下,充当NameNode
HDFS写数据流程
- 客户端向NameNode请求上传文件
- NameNode返回确认信息
- 客户端发送文件大小等信息,需要几个block
- NameNode返回DataNode节点,一般为3个
- 客户端向DataNode1请求上传数据,DataNode1收到请求后,向DataNode2发送,DataNode2向DataNode3发送
- 3个DataNode逐渐答应请求,完成通信管道建立
- 客户端向数据节点1发送第一个Block数据,数据节点1接收后发送给数据节点2,数据节点2发送数据节点3,完成备份
- 传输完毕后,关闭通信,结束写数据流程
其中,第一个副本随机一个,第二个副本和第一个副本同一个机架,第三个副本位于不同机架,随机节点。
HDFS读数据流程
- 客户端向名称节点请求读文件,通过元数据得到数据所在的数据节点
- 向数据节点请求读数据
- 数据节点传输数据给客户端
- 接收完毕,关闭连接