Hadoop 之 HA

HadoopHA

关于HA

由于集群中只有一个NN和RM,无法保证该节点不挂掉,所以单节点存在安全问题。

  1. HadoopHA主要是为了消除单点故障,我要在集群中启动备用的NN,RM。
  2. HA严格来说应该分成各个组件的HA机制:HDFS的HA和YARN的HA。
  3. HA采用paxos协议,要求必须搭建在奇数台服务器上,至少3台。
说明:
  • 多个NN时,抛弃了2NN,使用状态对NN进行标识,只有active状态的NN可以处理客户端请求,为主机,用来存放 Fsimage镜像文件,而standby状态的NN作为备机,需要及时同步主机的元数据,保证元数据一致。

  • 在第一次启动NN时,使用同步命令,将格式化后的fsimage文件,同步到所有的NN。在activeNN运行期间,使用JournalNode来同步edits文件,并且只有状态为active的NN可以操作将edits文件再同步到JournalNode,由standby状态的NN从JournalNode上同步。并且启用了HDFS的HA,不能再启动2NN!

  • 在启动后,需要手动将其中的一个NN提升为active状态,使用 hdfs haadmin -trasitionToActive xxx ,在切换时,必须保证当前集群中没有为active状态的NN!避免脑裂的显现。查询当前节点是否为 Active hdfs haadmin -getServiceState nn1。

    注意:

    手动故障转移时,当Active的NN挂掉以后,企图手动将其他节点设置为Active时需要在后面加 -ForceActive。因为,即使Active的节点挂掉了,集群则可能认为其存在假死的状态在重新激活为 Active 的节点启动之后之前挂掉的节点可能会重新启动,这样会导致脑裂。

  • 集群默认的启动方式为先启动NN再启动JN,所以可能存在 NN连接不上JN的情况倒是NameNode 无法正常启动的现象。默认连接10次每次1S。解决办法,修改配置文件中的这两个属性,让其连接20次,每次5S。

  • 在通过Zookeeper的临时锁节点实现自动故障转移,在每个NN所在的机器,启动一个ZKFC进程,这个进程会维护一个zookeeper客户端对Namenode的状态进行监视。在启动了这个进程后,如果当前机器的NN可用,ZKFC进程会抢先向ZK集群中注册一个临时节点!哪个ZKFC进程拥有对这个临时节点的所有权,会对节点加锁。在此进程的 Session 未断开前占用此节点,并且将当前的NN节点提升为Active。

ZKFC

ZKFC主要负责健康监测、Zookeeper会话管理

  • ZKFC定期的使用监控检查命令 Ping 和它在一个节点上的Namenode,只要Namenode 即及时复则认为是健康的ZKFC会保持在 Zookeeper 中打开的会话,如果当前Namenode为active状态,ZKFC会保持一个特殊的ZNode锁,该锁使用了Zookeeper对短暂节点的支持,如果Namenode崩溃,冷冻或命令超时都会被认为进入不健康状态即假死状态,ZKFC会断开会话,锁节点自动解除,当其他节点的ZKFC监听到该节点不存在后会开始争抢此节点,那个ZKFC抢占成功会将其当前的NameNode节点提升为Active,在次之前会使用隔离机制将之前的节点隔离,防止出现脑裂。

HDFSFederation 联邦架构

  • HA仅解决了单节点故障问题,并没有解决HDFS中Namenode命名空间的内存有限问题。由于NameNode在内存中存储所有的元数据,因此单个NameNode所能存储的对象数目受到NameNode所在JVM的 heap size 的限制。
  • 联邦架构使不同应用可以使用不同NameNode进行数据管理图片业务、爬虫业务、日志审计业务。
posted @ 2021-05-26 21:54  yuexiuping  阅读(198)  评论(0编辑  收藏  举报