Hadoop守护进程无法停止

4
我正在尝试通过./stop-all.sh脚本停止hadoop中的守护进程,但是它给出以下消息:
没有作业跟踪器可停止 localhost: 没有任务跟踪器可停止 没有名称节点可停止 localhost: 没有数据节点可停止 localhost: 没有SecondaryNameNode可停止
我尝试使用jps查看此后hadoop是否在运行,并显示:
27948 SecondaryNameNode 27714 NameNode 28136 TaskTracker 27816 DataNode 28022 JobTracker 8174 Jps
也就是说,所有守护进程都在正常运行。我还检查了hadoop dfs -ls /以查看是否能够连接到hdfs。可以工作。
我是通过supergroup用户运行stop-all.sh脚本的,这意味着权限没有问题。
1个回答

4

如果启动/停止脚本在$HADOOP_PID_DIR文件夹中找不到守护程序的pid文件(默认为/tmp),则会显示此消息。

如果:

  • 这些文件已被删除(由某人或某物),或者
  • $HADOOP_PID_DIR环境变量自启动守护程序以来已更改,或者
  • 停止守护程序的用户不是启动它们的用户

那么hadoop将显示您所看到的错误消息。

选定hadoop-daemon.sh文件(1.0.0版本)部分内容:

#   HADOOP_IDENT_STRING   A string representing this instance of hadoop. $USER by default

if [ "$HADOOP_IDENT_STRING" = "" ]; then
  export HADOOP_IDENT_STRING="$USER"
fi

# ....

if [ "$HADOOP_PID_DIR" = "" ]; then
  HADOOP_PID_DIR=/tmp
fi    

# ....

pid=$HADOOP_PID_DIR/hadoop-$HADOOP_IDENT_STRING-$command.pid

# ....

(stop)

  if [ -f $pid ]; then
    if kill -0 `cat $pid` > /dev/null 2>&1; then
      echo stopping $command
      kill `cat $pid`
    else
      echo no $command to stop
    fi
  else
    echo no $command to stop
  fi
  ;;

在这种情况下,我该如何停止我的集群? - Tapan Avasthi
最终,我能够停止集群。我执行了以下命令: ps -ef|grep java 它显示了进程ID,然后我将它们杀死。再次启动集群,一切都正常。 - Tapan Avasthi
2
你可以使用“jps”而不是“ps -ef | grep java”来查找守护进程的PID。 - lizzie
根据我的经验,jps并不总是显示所有进程。 - Chris White
我们有一个红帽子的守护进程,用于删除 /tmp 目录中10天前的文件...看起来是一个默认的脚本.../tmp 对于这些东西来说是非常糟糕的默认值,但 Hadoop 在所有地方都有这个。 - Dean Hiller
在我的情况下,stop-all.sh 会停止除 NameNode 和 JobTracker 之外的所有进程。这里可能出了什么问题? - krackoder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接