分享

执行stop-all.sh时遇到了no namenode to stop问题

sholydar 发表于 2015-2-10 10:56:47 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 6 140729
问题是发生在测试集群上的。这个集群一共有5台虚拟机,2个NameNode,3个DataNode,Hadoop版本为2.2.0。
Hadoop已经连续运行了两个多月,平时就跑跑程序,一直没有事。但是今天在维护时候发生了问题:
  1. [tester@HDFS0 conf]$ stop-all.sh
  2. This script is Deprecated. Instead use stop-dfs.sh and stop-yarn.sh
  3. 15/02/09 17:30:06 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
  4. Stopping namenodes on [HDFS0.hs HDFS1.hs]
  5. HDFS0.hs: no namenode to stop
  6. HDFS1.hs: no namenode to stop
  7. HDFS4.hs: no datanode to stop
  8. HDFS3.hs: no datanode to stop
  9. HDFS2.hs: no datanode to stop
  10. Stopping journal nodes [HDFS2.hs HDFS3.hs HDFS4.hs]
  11. HDFS2.hs: no journalnode to stop
  12. HDFS3.hs: no journalnode to stop
  13. HDFS4.hs: no journalnode to stop
  14. 15/02/09 17:30:14 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
  15. Stopping ZK Failover Controllers on NN hosts [HDFS0.hs HDFS1.hs]
  16. HDFS1.hs: no zkfc to stop
  17. HDFS0.hs: no zkfc to stop
  18. stopping yarn daemons
  19. no resourcemanager to stop
  20. HDFS3.hs: no nodemanager to stop
  21. HDFS4.hs: no nodemanager to stop
  22. HDFS2.hs: no nodemanager to stop
  23. no proxyserver to stop
复制代码
stop-all.sh 并没有找到 pid,无法正常停止相应进程!

我已经在 hadoop-env.sh 和 yarn-env.sh 中设置好了pid的存储路径:
在 hadoop-env.sh 中设置如下:
  1. export HADOOP_PID_DIR=/home/tester/hadoop/hadoop-2.2.0/pids
复制代码
在yarn-env.sh 中设置如下:
  1. export YARN_PID_DIR=/home/tester/hadoop/hadoop-2.2.0/pids
复制代码
进入目录中看到pid文件都在:
  1. [tester@HDFS0 pids]$ ls
  2. hadoop-tester-namenode.pid  yarn-tester-resourcemanager.pid
  3. hadoop-tester-zkfc.pid
复制代码
其中pid分别为:NN    58096; RM    58431 ; ZKFC    58351 。
与jps中查看的pid并不一致!
  1. [tester@HDFS0 conf]$ jps
  2. 9225 Jps
  3. 60038 NameNode
  4. 60400 ResourceManager
  5. 60313 DFSZKFailoverController
复制代码
有遇到过类似问题的朋友吗?





已有(6)人评论

跳转到指定楼层
bioger_hit 发表于 2015-2-10 12:17:09
相信原理你已经知道了
stop-all.sh会调用stop-mapred.sh和 stop-dfs.sh去停止jobtracker, tasktrackers; namenode, datanodes。
Jobtracker和namenode的停止是在本地通过调用hadoop-daemon完成的,而tasktracker,和datanode 的停止是通过调用hadoop-daemons来完成的。Hadoop-daemon实质上是ssh到每一个slave去执行一个当地的hadoop- daemon命令,比如:hadoop-daemon stop datanoade。
Hadoop-daemon  stop command会通过kill -0 `cat command.pid` 来测试进程是否存在,如果这个测试中有错误产生,就会报”no command to stop ”。
不一致,所以造成no ××× to stop。
可能的原因:
以前的pid被保留,而当前的pid找不到了
回复

使用道具 举报

xuanxufeng 发表于 2015-2-10 13:54:59
建议重新启动集群,在观察下
回复

使用道具 举报

sholydar 发表于 2015-2-10 15:20:30
bioger_hit 发表于 2015-2-10 12:17
相信原理你已经知道了
不一致,所以造成no ××× to stop。
可能的原因:

谢了。我图样图森破了,没有意识到pid文件修改可能与pid变化不同步。
我把 hadoop-daemon.sh 和 yarn-daemon.sh 改了一下,直接通过jps获取各个进程的pid把这个问题解决了。
回复

使用道具 举报

sholydar 发表于 2015-2-10 15:23:14
xuanxufeng 发表于 2015-2-10 13:54
建议重新启动集群,在观察下

谢了。我已经改了 hadoop-daemon.sh yarn-daemon.sh 。直接从jps获取pid,绕过pid文件把这个问题解决了。
回复

使用道具 举报

stark_summer 发表于 2015-2-11 09:53:50
一般默认都是通过jps获取当前环境的pid吧?
回复

使用道具 举报

klihua 发表于 2016-8-9 11:58:28
hadoop-daemon.sh 和 yarn-daemon.sh 里面是如何修改?具体修改那些了?能否给个详细的信息
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条