HDFS中NameNode、DataNode、Secondary NameNode的作用

1.名字节点
名字节点保存的信息主要可以分为三类,分别是:
(1)名字节点维护着整个文件系统的文件目录树、文件/目录的元数据信息和文件的数据块索引(每个文件对应的数据块列表)。这些信息在NameNode中保存在两个文件中,分别是FSImage(命名空间镜像)和EditLog(编辑日志)
(2)名字节点中保存着数据块与数据节点的对应关系。因此,当我们要读写数据时,首先联系名字节点获取数据所在的DataNode,再联系数据节点,真正得到数据。另外,数据块与数据节点的对应关系这部分信息并不保留在名字的本地文件系统中(即FSImage和EditLog中并不会保存这部分数据),而是在每次名字节点启动的时候,数据节点会向名字节点汇报自己保存的信息,名字节点会动态的重建这部分信息。
(3)名字节点中还保存着HDFS整体运行的状态信息,如每个数据节点的负载、整个集群的可用空间、已用空间等等。
2.数据节点
HDFS的搭建在Linux文件系统之上的文件系统,因此它的数据实际还是存储在Linux上的!!!每个HDFS数据块,在Linux上都是作为普通文件进行保存的!因此数据节点的作用主要就是将上层的HDFS数据块写到Linux本地文件系统的实际文件中,或者从Linux的实际文件中读取数据块。因此,数据节点的作用主要是:
(1)客户端在操作HDFS中的数据时,会先联系名字节点,得到每个数据块保存在哪个数据节点上,然后客户端会再联系数据节点进行数据的处理。
(2)为了数据的高可用性(默认数据块的3副本机制),数据节点会和其它数据节点通信,复制数据块到其它节点上,保证数据的冗余存储。
(3)数据节点作为从节点,会不断的和名字节点进行通信。初始化时,数据节点会将自己保存的数据块信息告知名字节点,从而使得名字节点知道数据块保存在哪个数据节点上;后续数据节点在工作过程中,也不断的通过心跳发送自己的本地修改的相关信息,并且也会接受名字节点的指令,创建、移动或者删除本地Linux磁盘中的数据块。
3. Secondary NameNode
在没有NameNode的HA之前,Secondary NameNode会根据集群配置的时间间隔,不停的获取在某一个时间点NameNode的FSImage和Edit Log,并将它们加载到内存中进行合并得到新的FSImage。然后会将新的FSImage上传到NameNode上,替换原有的FSImage。
利用Secondary NameNode,为NameNode提供了一个检查点机制,从而避免了NameNode在启动时,回放Edit Log时间过长,导致HDFS集群启动时间过长问题。
Secondary NameNode虽然近乎保存了NameNode的实际的FSImage和Edit Log(在两次检查点之间的信息,Secondary NameNode并没有办法获知),但是它并不能作为NameNode的HA机制中的备份NameNode。因为它的作用太过于单一(只是合并FSImage和Edit Log,并回传到NameNode中),并不能有效的处理HA机制中的脑裂、并没有保存数据块与数据节点的对于关系等,因此HDFS是使用其他方式来实现NameNode的HA的。

你可能感兴趣的:(HDFS)