NameNode和SecondaryNameNode关系解析

来源:互联网 发布:leg圣兽dbc数据 编辑:程序博客网 时间:2024/06/07 21:33

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在为集群服务时可能无法提供足够的资源,所以这件事情就交给了SecondaryNameNode。NameNode和SecondaryNameNode交互如图
这里写图片描述

  1. SecondaryNameNode引导NameNode滚动更新编辑日志,并开始将新的内容写进Edit Log.new。
  2. SecondaryNameNode将NameNode的FSImage和编辑日志文件复制到本地的检查点目录。
  3. SecondaryNameNode载入FSImage文件,回放编辑日志,将其合并到FSImage,将新的FSImage文件压缩后写入磁盘。
  4. SecondaryNameNode将新的FSImage文件放回NameNode,NameNode在接受新的FSImage后,直接加载和启用该文件。
  5. NameNode将Edit Log.new更名为Edit Log。
    默认情况下,该过程一小时发生一次,或者当编辑日志达到默认的64MB也会触发。
原创粉丝点击