Secondary NameNode
通过在另外一台机器上配置Secondary NameNode,周期性地合并FsImage和EditLog来控制EditLog的大小。主要有两个参数配置参数:
・dfs.namenode.checkpoint.period 默认每个一小时建立一个检查点
・dfs.namenode.checkpoint.txns 默认每100万条记录强制建立一个检查点
Checkpoint Node
配置Checkpoint Node和Secondary NameNode类似,是后者的替代方式,不同之处在于它周期性地将NameNode的FsImage和EditLog下载到本地合并,然后把合并的结果上传回namenode。一个NameNode可以同时配置多个Checkpoint Node。
Backup Node
Backup Node同样可以提供上述Checkpoint的功能,同事维持一份和NameNode同步的内存映射。即其接收NameNode的EditLog,同时还将其内容更新至自己的内存,相当于做了一个namespace的备份。
Backup Node因为是时刻与NameNode同步的,所以它不需要从NameNode下载FsImage和EditLog,只需要定期地把本机上的FsImage和EditLog保存即可。
对于每个NameNode,目前只允许配置一个Backup Node。而且利用Backup node模式就不允许登录CheckPoint Node了。
HDFS High Availability
在Hadoop2.X之前,每个集群只能有一个NameNode,如果它出现问题会导致整个集群瘫痪掉。因此NameNode需要有一定的冗余,通常配置成Active/Standby,在Active失效的时候能马上无缝切换至standby机上。现阶段Active/Standby直接的同步有两种方式:
JournalNodes(JNs)伺服方式:ActiveNode持续地将EditLog写入到JournalNode伺服进程,而StandbyNode则能够实时监视并从中读取相关内容进行同步。JournalNodes只允许一个NameNode进行写入操作,如果Active失效,Standby将自动获得写入权。
shared NFS directory方式:通过挂接一个两者都拥有读写权限的共享文件夹的方式进行同步。Active一方不断将EditLog写入该文件夹,而Standby则监视该文件同时同步到自己的namesapce中。