hdfs-zkfc原理分析

目录:

1.基本原理

2.运行机制


一.基本原理:

1.1 简单介绍

ZooKeeperFailoverController :hadoop中通过ZK实现FC功能的一个实用工具。 
功能:作为一个ZK集群的客户端,用来监控NN的状态信息,每个运行NN的节点必须要运行一个zkfc 进程;

zk的基本特性: 
(1) 可靠存储小量数据且提供强一致性 
(2) ephemeral node(创建的锁节点), 在创建它的客户端关闭后,可以自动删除 
(3) 对于node状态的变化,可以提供异步的通知(watcher)

zk在zkfc中可以提供的功能: 
(1) Failure detector(通过watcher监听机制实现): 及时发现出故障的NN,并通知zkfc 
(2) Active node locator: 帮助客户端定位哪个是Active的NN 
(3) Mutual exclusion of active state(通过加锁): 保证某一时刻只有一个Active的NN

zkfc原理图:

1.2 内部模块(如图):

(1) ZKFailoverController(DFSZKFailoverController): 驱动整个ZKFC的运转,通过向HealthMonitor和ActiveStandbyElector注册回调函数的方式,subscribe HealthMonitor和ActiveStandbyElector的事件,并做相应的处理
(2) HealthMonitor: 定期check NN的健康状况,在NN健康状况发生变化时,通过回调函数把变化通知给ZKFailoverController
(3) ActiveStandbyElector: 管理NN在zookeeper上的状态,zookeeper上对应node的结点发生变化时,通过回调函数把变化通知给ZKFailoverController
(4) FailoverController: 提供做graceful failover的相关功能(dfs admin可以通过命令行工具手工发起failover)

 

二.运行机制

2.1 组件功能:

1.Health monitoring 
zkfc定期对本地的NN发起health-check的命令,如果NN正确返回,那么这个NN被认为是OK的。否则被认为是失效节点。

2.ZooKeeper Session Management 
当本地NN是健康的时候,zkfc将会在zk中持有一个session。如果本地NN又正好是active的,那么zkfc还有持有一个”ephemeral”的节点作为锁,一旦本地NN失效了,那么这个节点将会被自动删除。

3.ZooKeeper-based election 
如果本地NN是健康的,并且zkfc发现没有其他的NN持有那个独占锁。那么他将试图去获取该锁,一旦成功,那么它就需要执行Failover,然后成为active的NN节点。Failover的过程是:第一步,对之前的NN执行fence,如果需要的话。第二步,将本地NN转换到active状态。

另外: 
如果一个Active因HealthMonitor监控到状态异常,这里会作出判断,先通过Fencing功能关闭它(确保关闭或者不能提供服务),然后在ZK上删除它对应ZNode。

发送上述事件后,在另外一台机器上的ZKFC中的ActiveStandbyElector 会收到事件,并重新进行选举(尝试创建特定ZNode),它将获得成功并更改NN中状态,从而实现Active节点的变更。

 

2.2 运行机制

通常情况下Namenode和ZKFC布署在同一台物理机器上, HealthMonitor, FailoverController, ActiveStandbyElector在同一个JVM进程中(即ZKFC), Namenode是一个单独的JVM进程。ZKFC在整个系统中有几个重要的作用:
(1) Monitor and try to take active lock: 向zookeeper抢锁,抢锁成功的zkfc,指导对应的NN成为active的NN; watch锁对应的znode,当前active NN的状态发生变化导致失锁时,及时抢锁,努力成为active NN
(2) Monitor NN liveness and health: 定期检查对应NN的状态, 当NN状态发生变化时,及时通过ZKFC做相应的处理
(3) Fences other NN when needed: 当前NN要成为active NN时,需要fence其它的NN,不能同时有多个active NN

 

ZKFC的线程模型总体上来讲比较简单的,它主要包括三类线程,一是主线程;一是HealthMonitor线程; 一是zookeeper客户端的线程。它们的主要工作方式是:
(1) 主线程在启动所有的服务后就开始循环等待
(2) HealthMonitor是一个单独的线程,它定期向NN发包,检查NN的健康状况
(3) 当NN的状态发生变化时,HealthMonitor线程会回调ZKFailoverController注册进来的回调函数,通知ZKFailoverController NN的状态发生了变化
(4) ZKFailoverController收到通知后,会调用ActiveStandbyElector的API,来管理在zookeeper上的结点的状态
(5) ActiveStandbyElector会调用zookeeper客户端API监控zookeeper上结点的状态,发生变化时,回调ZKFailoverController的回调函数,通知ZKFailoverController,做出相应的变化

 

参考资料https://issues.apache.org/jira/secure/attachment/12521279/zkfc-design.pdf

### 回答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命令执行失败,您需要仔细检查配置和系统设置,以确定导致问题的原因,并采取相应的措施来解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值