大家好,又见面了,我是你们的朋友全栈君。
hadoop集群中一般有两个namenode,一个处于active激活状态,另一个处于StandBy状态,Active状态的NameNode负责集群中所有的客户端操作,这么设置的目的,其实HDFS底层的机制是有关系的,同一时刻一个文件,只允许一个写入方占用,如果出现多个,那么文件偏移量便会混乱,从而导致数据格式不可用,当然状态为Standby的NameNode这时候仅仅扮演一个Slave的角色,以便于在任何时候Active的NameNode挂掉时,能够第一时间,接替它的任务,成为主NameNode,达到一个热备份的效果。在HA架构里面SecondaryNameNode这个冷备角色已经不存在了,为了保持从NameNode时时的与主NameNode的元数据保持一致,他们之间交互通过一系列守护的轻量级进程JournalNode,当任何修改操作在主NameNode上执行时,它同时也会记录修改log到至少半数以上的JornalNode中,这时状态为Standby的NameNode监测到JournalNode里面的同步log发生变化了会读取JornalNode里面的修改log,然后同步到自己的的目录镜像树里面,当发生故障时,Active的NameNode挂掉后,Standby的NameNode会在它成为Active NameNode前,读取所有的JournalNode里面的修改日志,这样就能高可靠的保证与挂掉的NameNode的目录镜像树一致,然后无缝的接替它的职责,维护来自客户端请求,从而达到一个高可用的目的。
当然热备需要zookeeper了,为了达到快速容错的掌握全局的目的,Standby角色也会接受来自DataNode角色汇报的块信息,前面只是介绍了NameNode容错的工作原理,下面介绍下,当引入Zookeeper之后,为啥可以NameNode-HA可以达到无人值守,自动切换的容错。 在主备切换上Zookeeper可以干的事: (1)失败探测 在每个NameNode启动时,会在Zookeeper上注册一个持久化的节点,当这个NameNode宕机时,它的会话就会终止,Zookeeper发现之后,就会通知备用的NameNode,Hi,老兄,你该上岗了。 (2)选举机制, Zookeeper提供了一个简单的独占锁,获取Master的功能,如果那个NameNode发现自己得到这个锁,那就预示着,这个NameNode将被激活为Active状态
那么secondarynamenode是干什么用的呢?
1、学者会见名思义的认为secondarynamenode是namenode的备份其它的,或者认为它们是一样的。实质上,它是namenode的一个快照,会根据configuration中设置的值来决定多少时间周期性的去获取namenode中的metadata及其它数据。
2、假使namenode损坏或丢失之后,无法启动hadoop这时就要人工去干预恢复到secondarynamenode中所照快照的状态,这就意味着集群的数据会或多或少的丢失和一些宕机时间,并且将secondarynamenode作为重要的namenode来处理,这就要求,尽量不要将secondarynamede和namenode放在同一台机器上。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/106128.html原文链接:https://javaforall.cn