在Hadoop的使用中,NameNode的单点失败问题一直困扰着框架的使用者。这一节我们提出了一种利用ZooKeeper对NameNode进行冗余备份协同工作方案,避免了NameNode单点失败造成的服务不可用与文件丢失问题。
NameNode是整个HDFS的核心,HDFS所有的操作均需由NameNode参与,并且NameNode负责维护整个分布式文件系统中所有文件的元信息以及目录信息。如果NameNode出现了失败,那么HDFS中所有文件信息将全部丢失。虽然HDFS针对每一个文件都可以根据配置进行多份数据备份,但是NameNode却只有一个。这使得NameNode成为了HDFS中的薄弱点,如果NameNode发生单点失败将导致整个HDFS系统的失败。
图1-9NameNode架构图
HDFS中使用SecondaryNameNode解决NameNode失败的问题。SecondaryNameNode并不是NameNode的冗余备份,而是单独的一个参与者,负责对NameNode中文件元信息以及文件结构定期快照。SecondaryNameNode定期从NameNode上下载镜像和日志进行合并,称为一次checkpoint,将得到的新的镜像文件上传到NameNode替换原来的镜像文件,使得NameNode上的镜像文件保持最新。当NameNode出现失败时,可以从SecondaryNameNode所在的机器拷贝之前的快照,然后重启NameNode,此时NameNode会导入快照中保存的文件信息,重建文件系统。
SecondaryNameNode方案存在以下几个问题: