HDFS ZKFC自动切换原理分析

前言


Hadoop社区在HDFS-1623High Availability Framework for HDFS NN)以及相关JIRA中对NameNode增加了高可用性的支持。但是它的实现需要依赖管理员手动切换NameNode,以此来触发NameNode的切换。这种操作方式有时会带来一些问题,比如说一个NameNode因为非主观原因导致异常,挂了,这个时候怎么办,这个时候我们可能更需要自动切换的一套机制来解决这个问题。毕竟集群管理员不会随时随地地监控着集群。基于这个应用场景,社区在HDFS-3042Automatic failover support for NN HA)对现有HA的功能增加自动切换的支持。因为HDFS-3042是一个父JIRA,本文我们将主要关注其最后的核心子JIRA,HDFS-2185HA: HDFS portion of ZK-based FailoverController),也就是基于ZK的自动切换原理实现,对应呈现的形式就是我们平常看到的ZKFC进程。

基于ZK的HA切换原理


在讲解ZKFC进程的组成部分之前,我们需要了解HDFS如何依赖ZK实现切换操作的。首先我们需要了解一下什么是ZK以及ZK有什么作用,然后我们才能理解HDFS为什么要利用ZK来实现自动切换的机制。

ZK全称是Zookeeper,ZK的一个很大的特点是它可以保持高度的一致性,而且它本身可以支持HA,在ZK集群最后,只要保证半数以上节点存活,ZK集群就还能对外提供服务。

那么HDFS的Active、Standby节点与ZK有什么关联呢?

当一个NameNode被成功切换为Active状态时,它会在ZK内部创建一个临时的znode,在znode中将会保留当前Active NameNode的一些信息,比如主机名等等。当Active NameNode出现失败或连接超时的情况下,监控程序会将ZK上对应的临时znode进行删除,znode的删除事件会主动触发到下一次的Active NamNode的选择。

因为ZK是具有高度一致性的,它能保证当前最多只能有一个节点能够成功创建znode,成为当前的Active Name。这也就是为什么社区会利用ZK来做HDFS HA的自动切换的原因。

HDFS HA自动切换机制的核心:ZKFC


正如本节小标图所显示的,HDFS HA自动切换机制的核心对象是ZKFC ,也就是我们平常在NameNode节点上会启动的ZKFC进程。

在ZKFC的进程内部,运行着3个对象服务:

  • HealthMonitor:监控NameNode是否不可用或是进入了一个不健康的状态。
  • ActiveStandbyElector:控制和监控ZK上的节点的状态。
  • ZKFailoverController:协调HealMonitor和ActiveStandbyElector对象,处理它们发来的event变化事件,完成自动切换的过程。

以上3者的运行结果图如图1-1所示。



图 1-1 ZKFC组成以及运行图

接下来我们来简单介绍这3个对象服务。

HealthMonitor


首先是HealthMonitor监控服务,通过它的名称我们就能够看出它是一个监控服务。在此对象内部,定义了5种服务状态,如下代码所示:

  public enum State {
    // 1.The health monitor is still starting up.
    INITIALIZING,

    // 2.The service is not responding to health check RPCs.
    SERVICE_NOT_RESPONDING,

    // 3.The service is connected and healthy.
    SERVICE_HEALTHY,

    // 4.The service is running but unhealthy.
    SERVICE_UNHEALTHY,

    // 5.The health monitor itself failed unrecoverably and can
    // no longer provide accurate information.
    HEALTH_MONITOR_FAILED;
  }

翻译过来就是下面5种状

  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 您好,hdfs zkfc -formatzk 失败可能是由于以下原因导致的: 1. ZooKeeper 服务未启动或未正确配置。请确保 ZooKeeper 服务已经启动,并且配置正确。 2. Hadoop 配置文件中的 ZooKeeper 相关配置错误。请检查 Hadoop 配置文件中的 ZooKeeper 相关配置是否正确。 3. Hadoop 集群中的节点之间网络连接不稳定或者存在故障。请检查 Hadoop 集群中的节点之间的网络连接是否正常,并且排除故障。 希望以上信息能够帮助您解决问题。如果您需要更多帮助,请提供更多详细信息,我们会尽力帮助您解决问题。 ### 回答2: HDFSzkfc是作为Hadoop高可用性的一个关键组件,它负责监控NameNode的健康状态,并在发现NameNode失效时协调新的Active NameNode的选举。zkfc需要对Zookeeper进行操作来进行其功能,而zkfc -formatzk是对Zookeeper进行初始化所使用的命令。 因为zkfc -formatzk命令会将Zookeeper的节点信息进行初始化,所以执行该命令时最好确保Zookeeper的网络环境完全正确,确保Zookeeper处于停止状态。 引起zkfc -formatzk操作失败的可能原因包括: 1. Zookeeper不可用或配置错误 在zkfc -formatzk操作时,执行命令的机器需要能够成功连接到Zookeeper节点。如果Zookeeper配置有误,导致命令无法连接上Zookeeper,那么zkfc -formatzk命令就会失败。检查Zookeeper是否正确启动,并检查通信配置是否正确。 2. Znode中的数据格式不正确 zkfc -formatzk命令会在Zookeeper的Znode中创建新的数据结构,而在这些数据结构中的格式必须保持正确。如果之前曾经执行过zkfc -formatzk命令或手动修改过Zookeeper的数据格式,那么可能会导致数据格式不兼容,从而导致zkfc -formatzk命令失败。如果已执行过该命令,则需要先清空Zookeeper的数据,并再次执行该命令。 3. 网络问题 端口设置不正确,或者网络连接不稳定等问题也可能导致zkfc -formatzk命令失败。在执行该命令之前,检查一下网络状态和端口设置是否正确,并尝试使用ping命令进行诊断。 总之,zkfc -formatzk命令是Hadoop高可用性体系中的一个重要组件。当发现该命令无法执行时,我们应该先排除网络问题,再检查Zookeeper的配置是否正确以及Zookeeper中的数据格式是否正确,确保Zookeeper处于停止状态,然后再执行该命令。 ### 回答3: HDFS是一个分布式文件系统,ZooKeeper是一个开源的分布式协调服务。hdfs zkfc是一个Hadoop命令,它用于格式化ZooKeeper Failover Controller(ZKFC)。ZKFC是一个Hadoop高可用性(HA)架构的组件之一,它用于控制Hadoop NameNode的故障转移。如果hdfs zkfc -formatzk命令执行失败,可能会出现以下一些原因: 1. ZooKeeper集合配置错误:如果Hadoop配置文件中的ZooKeeper集合配置错误,则hdfs zkfc -formatzk命令将无法正常工作。这是因为hdfs zkfc命令需要连接到正确的ZooKeeper实例才能执行格式化操作。 2. ZooKeeper节点不可用:如果ZooKeeper节点因某种原因不可用,例如网络问题或硬件故障,hdfs zkfc -formatzk命令也会失败。在这种情况下,您需要确保ZooKeeper服务正在运行,并且所有节点正常工作。 3. 权限问题:如果hdfs zkfc命令执行用户没有足够的权限来格式化ZooKeeper故障转移控制器,则该命令将失败。在这种情况下,您需要使用具有适当权限的用户执行命令。 4. 文件系统中的问题:如果Hadoop文件系统(HDFS)中有某些文件损坏或损坏,则hdfs zkfc -formatzk命令可能会失败。在这种情况下,您需要修复文件系统并重新运行命令。 总之,如果hdfs zkfc -formatzk命令执行失败,您需要仔细检查配置和系统设置,以确定导致问题的原因,并采取相应的措施来解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值