用stop-all.sh无法停止hadoop了,用jps看当前的进程,kill掉hadoop相关的进程即可。网上还有一种方法:
http://blog.csdn.net/gavinming/article/details/4367711
在网上搜索了一圈,得知了问题所在: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 ”。
可能原因: pid 文件丢了,导致 hadoop-daemon.sh stop XXX 时找不到进程号。
解决办法:默认 pid 文件放在 /tmp 目录下,不太安全。可以在 conf/hadoop-env.sh 里设置 HADOOP_PID_DIR 环境变量改变 pid 文件的存放目录。
所以配置的时候最好添加一个固定的目录存储hadoop的PID。