hdfs组成:
主控节点(NameNode)、从节点(DataNode)、客户端
1.NameNode
NameNode是一个主控节点,用来管理整个文件系统的命名空间和元数据,以及处理来自外界的文件访问请求。NameNode 保存了文件系统的三种元数据:
1) 命名空间, 即整个分布式文件系统的目录结构;
2 ) 数据块与文件名的映射表;
3) 每个数据块副本的位置信息,每一个数据块默认有3 个副本。
2.DataNode
文件中的每个数据块默认的大小为64MB; 同时为了防止数据丢失, 每个数据块默认有3 个副本,且3 个副本会分别复制在不同的节点上,以避免一个节点失效造成一个数据块的彻底丢失。
每个DataNode 的数据实际上是存储在每个节点的本地Linux 文件系统中。
NameNode 上可以执行文件操作,比如打开、关闭、重命名等; 而且NameNode 也负责向DataNode分配数据块并建立数据块和DataNode 的对应关系。
DataNode 负责处理文件系统用户具体的数据读写请求,同时也可以处理NameNode 对数据块的创建、删除副本的指令。
典型的部署模式采用NameNode单独运行于一台服务器节点上,其余的服务器节点,每一台运行一个DataNode。
3.基本访问流程
首先,用户的应用程序通过HDFS 的客户端程序将文件名发送至NameNode 。
NameNode 接收到文件名之后,在HDFS 目录中检索文件名对应的数据块,再根据数据块信息找到保存数据块的DataNode 地址,将这些地址回送给客户端。
客户端接收到DataNode 地址之后,与DataNode 并行地进行数据传输操作,同时将操作结果的相关日志(比如是否成功,修改后的数据块信息等)提交到NameNode 。