【问题标题】:Hadoop Daemons not stoppingHadoop 守护进程没有停止
【发布时间】:2012-05-09 08:28:25
【问题描述】:

我正在尝试通过 ./stop-all.sh 脚本停止 hadoop 中的守护进程,但它给出了以下消息:

没有作业跟踪器可以停止 本地主机:没有任务跟踪器停止 没有名称节点可以停止 localhost:没有要停止的数据节点 本地主机:没有要停止的辅助名称节点

我尝试使用 jps 查看 hadoop 是否在此之后运行,结果显示:

27948 次要名称节点 27714 名称节点 28136 任务跟踪器 27816 数据节点 28022 工作跟踪器 8174 日/秒

也就是说,它正在正确运行所有守护进程。我还检查了 hadoop dfs -ls / 以查看我是否能够连接到 hdfs。它正在工作。

我正在按超级组用户的意思运行 stop-all.sh 脚本,权限没有问题。

【问题讨论】:

    标签: hadoop hdfs


    【解决方案1】:

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

    如果:

    • 这些文件已被删除(由某人或某事),或者
    • 环境变量 $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
      ;;
    

    【讨论】:

    • 在这种情况下如何停止我的集群?
    • 最后,我可以停止集群了。我做了: ps -ef|grep java 它显示了进程ID,我杀死了它们。再次启动集群,一切正常。
    • 你也可以使用“jps”而不是“ps -ef|grep java”来查找守护进程的pid
    • jps 并不总是显示所有进程(根据我的经验)
    • 我们有一个 redhat 守护进程删除 /tmp 目录中超过 10 天的文件....似乎是一个默认脚本 ...../tmp 对于这些东西来说是一个非常糟糕的默认值,但是hadoop 在整个游戏中都有这一点。