但行好事
莫论前程❤

关闭Hadoop集群时提示no xxx to stop

转载自老大的博客:https://tvzr.com/close-hadoop-error-no-journalnode-to-stop.html
迁移机器的时候,需要手动关闭所有的机器。那么关机之前当然是要先安全的关闭hadoop的相关服务,但是由于这个集群不是我搭建的,发现有些机器在关闭集群的时候出现no xxx to stop,就我发现的来说有namenode,journalnode,jobtracker这三个。

问题的原因

Hadoop在stop的时候依据的是启动是保存到pid文件的pid.而默认的进程号保存在/tmp下,Linux 默认会每隔一段时间(一般是一个月或者7天左右)去删除这个目录下的文件。因此删掉pid文件后,namenode自然就找不到datanode上的这个进程了。(不同的进程的进程id文件名会有变化)

解决办法

临时解决

针对这次集群关闭,我们需要做的是:首先保证集群没有负载,然后去手动杀死datanode/journalnode/zkfc最后去杀死namenode(注意顺序)

永久解决

在配置文件hadoop_env.sh中配置export HADOOP_PID_DIR可以解决这个问题。

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所示。

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

赞(0) 打赏
未经允许不得转载:刘鹏博客 » 关闭Hadoop集群时提示no xxx to stop
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏