【Hadoop】HDFS三组件:NameNode、SecondaryNameNode和DataNode

HDFS主要由三个组件构成,分别是NameNode、SecondaryNameNode和DataNode,其中NameNode和SecondaryNameNode运行在master节点上,DataNode运行在slave节点上。

HDFS架构如下图:

【Hadoop】HDFS三组件:NameNode、SecondaryNameNode和DataNode

1. NameNode

NameNode管理HDFS文件系统的命名空间,它维护文件系统树及树中的所有文件和目录。同时NameNode也负责这些文件和目录的打开、关闭、移动和重命名等操作。而实际文件数据的操作是由DataNode负责。

当Client端发起请求,该请求首先会到达NameNode,NameNode分析请求,然后告诉Client该去哪个DataNode上找什么位置的数据块。得到消息后的Client会直接和DataNode进行交互。

NameNode中元数据种类有:

(1)文件名目录及它们的层级关系;(2)文件目录的所有者及其权限;(3)每个文件块的名称及文件有哪些块组成。

需要注意的是,NameNode保存的元数据信息并不包含每个数据块的位置信息,只包含块的名称及文件由哪些块组成。块的位置信息会在NameNode每次重启时从DataNode获取,并且NameNode通过心跳机制和DataNode保持通信,实时监控文件系统是否在正常运行。

2. DataNode

DataNode运行在slave节点上,也称为工作节点。它负责存储数据块,也负责为Client端提供读写服务,同时还接收NameNode指令,进行创建、删除和复制等操作。DataNode还通过心跳机制定期向NameNode发送所存储文件块列表信息。并且DataNode还和其他DataNode节点通信,复制数据块已达到冗余的目的。

3. SecondaryNameNode

NameNode元数据信息存储在FsImage中,NameNode每次重启后会把FsImage读取到内存中,在运行过程中为了防止数据丢失,NameNode的操作会被不断的写入本地EditLog文件中。

当检查点被触发,FsImage会把EditLog文件中的操作应用一遍,然后把新版的FsImage写回磁盘中,删除EditLog文件中旧的事务信息。检查点有两种触发机制:(1)按秒为单位的时间间隔触发(dfs.namenode.checkpoint.period);(2)达到文件系统累加的事务值触发(dfs.namenode.checkpoint.txns)。

FsImage和EditLog文件的合并就用到了SecondaryNameNode组件,它的工作过程如下:

(1)合并之前通知NameNode把所有操作写入新的EditLog文件中,并将其命名为edits.new;

(2)SecondaryNameNode从NameNode处请求合并FsImage和EditLog;

(3)SecondaryNameNode把FsImage和EditLog合并为新的FsImage文件;

(4)NameNode从SecondaryNameNode获取合并好的新的FsImage并将旧的替换掉,并把EditLog用(1)中创建的edits.new替换。

(5)更新Fstime中的检查点。

总而言之:

(1)FsImage:保存的是上个检查点的HDFS的元数据信息;

(2)EditLog:保存的是从上个检查点开始发生的HDFS元数据信息状态改变信息;

(3)Fstime:保存了最后一个检查点的时间戳。