namenode启动时,首先将映像文件(fsimage)载入内存,并执行编辑日志(edits)中的各项编辑操作。一旦在内存中成功建立文件系统元数据的映像,则创建一个新的fsimage文件(该操作不需要借助secondary namenode)和一个空的编辑日志。在这个过程中,namenode运行中安全模式,意味着namenode的文件系统对于客户端来说是只读的。
严格来说,在安全模式下,只有那些访问文件系统元数据的文件系统操作是肯定成功执行的,例如显示目录列表等。对于读文件操作来说,只有集群中当前datanode上的块可用时,才能够工作。但文件修改操作(包括写、删除或重命名)均会失败。
需要强调的是,系统中数据块的位置并不是由namenode维护的,而是以块列表的形式存储在datanode中(每个datanode存储的块组成的列表)。在系统的正常操作期间,namenode会在内存中保留所有块位置的映射信息。在安全模式下,各个datanode会向namenode发送最新的快列表信息,namenode了解到足够多的块位置信息之后,即可高效运行文件系统。如果namenode认为向其发送更新信息的datanode节点过少,则它会启动快复制进程,以将数据块复制到新的datanode节点。然而,在大多数情况下上述操作都是不必要的(因为实际上namenode只需继续等待更多datanode发送更新信息即可),并浪费了集群的资源。实际上,在安全模式下namenode并不向datanode发送任何块复制或块删除的指令。
如果满足“最小副本条件”(minimal replication condition),namenode会在30秒钟之后就退出安全模式。所谓的最小副本条件指的是在整个文件系统中有99.9%的块满足最小副本级别(默认值是1,由dfs.namenode.replication.min属性设置)。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。