学习HADOOP有一段时间,先总结一下HADOOP中涉及到的NameNode,SecondNameNode和DataNode节点的概念和作用。
首先要明白HADOOP分布式框架是一种主-从节点的架构形式(如下图所示),NameNode所在节点是主节点,DataNode节点是分节点,一个cluster中一般只有一个NameNode节点(Federation 联邦制架构除外),而SecondNameNode是用于辅助Name Node节点而存在的(要明白SNN不是NN的备份,与HA机制中Standy节点的概念不同,关于HADOOP中HA的概念请查看后续博文)。
NameNode节点中用于管理文件系统的命名空间(namespace),包括文件系统结构树(filesystem tree)、所有文件的元数据(metadata)。这些信息以fsimage和edit log的形式永久的保存在本地磁盘中;fsimage记录了所有文件和目录。edit记录所有操作,是增量信息。NameNode同时也知道某个文件的block在哪个节点上(即NN节点中存储了block与DN的map映射关系),但NN不存储block
locations,块位置信息在每次启动的时候由DN节点发送报告并重建。
DataNode节点是实际存储数据的地方。DN节点通过心跳机制(heartbeat)向NN汇报健康状态(默认每三秒发送一次心跳信息);同时默认每小时向NN发送块报告(block report)。
NN节点在启动的时候要读取磁盘中的fsimage文件和大量的edits文件,会消耗大量的时间,导致启动时间极长。同时,NN节点也存在单点故障问题。如果一个集群中NN节点受损,则整个集群的所有信息将丢失,因为所有的读、写操作都先通过客户端client与NN节点通信才能去DN读取文件(具体读写操作过程请看后序博文)。介于这两个问题,一个应对方式就是运行一个辅助的NameNode,即SecondNameNode节点。
SNN节点的主要作用是定期的将Namespace镜像与操作日志文件(edit log)合并,以防止操作日志文件(edit
log)变得过大。通常,Secondary Namenode运行在一个单独的物理机上,因为合并操作需要占用大量的CPU时间以及和Namenode相当的内存。辅助Namenode保存着合并后的Namespace镜像的一个备份,万一哪天Namenode宕机了,这个备份就可以用上了。SNN的运行过程如下图:
具体过程(摘自HADOOP OPERATIONS):