HDFS集群在启动后会有三个守护进程:NameNode,SecondaryNameNode和DataNode。我们都知道DataNode是用来存放数据的位置,那么NameNode和SecondaryNameNode的关系又是怎么样的呢?许多初学者根据名字可能会以为当NameNode出现故障时,SecondaryNameNode会自动成为新的NameNode,也就是NameNode的“热备”。通过下面的介绍,我们就会清楚地认识到这是错误的。
NameNode也被成为名字节点,是HDFS的主从架构的主角色的扮演者。它维护者整个文件系统的目录树,以及目录树里的所有文件和目录,这些信息以两种文件存储在本地文件中:一种时命名空间镜像(也称文件系统镜像,File System Image, FSImage),即HDFS元数据的完整快照,每次NameNode启动时,默认会加载最新的命名空间镜像,另一种是命名空间镜像的编辑日志(edit log)。
SecondaryNameNode也被称为第二名字节点,用于定期合并命名空间镜像和命名空间镜像的编辑日志。
FSImage 文件其实是文件系统元数据的一个永久行检查点,因为FSImage是一个大型文件,如果频繁的执行写操作,会使系统运行很慢。解决方案是NameNode只将改动内容预写日志(WAL),即写入命名空间镜像的编辑日志。随着时间的推移,编辑日志会越来越大,那么一旦发生故障,将会花费很多的时间回滚操作,所以需要定期合并FSImage和编辑日志,如果由NameNode来做,那么NameNode在为集群服务时可能无法提供足够的资源,所以这件事情就交给了S