zoukankan      html  css  js  c++  java
  • hadoop 关闭进程时报错no 进程 to stop

    前两天和朋友李天王吃饭的时候,聊到了一个hadoop的运维的很简单问题,感觉很有意思,以前也没有注意过,现在加以重现和整理。 
      感谢李天王的分享。。。。 
      翻看了yarn-deamon.sh stop部分的脚本: 

    Java代码  
    1. (stop)  
    2.   
    3.    if [ -f $pid ]; then  
    4.      TARGET_PID=`cat $pid`  
    5.      if kill -0 $TARGET_PID > /dev/null 2>&1; then  
    6.        echo stopping $command  
    7.        kill $TARGET_PID  
    8.        sleep $YARN_STOP_TIMEOUT  
    9.        if kill -0 $TARGET_PID > /dev/null 2>&1; then  
    10.          echo "$command did not stop gracefully after $YARN_STOP_TIMEOUT seconds: killing with kill -9"  
    11.          kill -9 $TARGET_PID  
    12.        fi  
    13.      else  
    14.        echo no $command to stop  
    15.      fi  
    16.    else  
    17.      echo no $command to stop  
    18.    fi  


    根据上面代码。在关闭hadoop的进程的时候,会首先TARGET_PID=`cat $pid`,后面的操作都 
    针对这个TARGET_PID。 
    首先发送kill -0 TARGET_PID来检测这个pid存在不存在,若存在那么就使用kill  TARGET_PID 来关闭进程。 
    第二个 kill -0 $TARGET_PID,意思是第一次删除失败的时候,则执行kill -9 $TARGET_PID。 
      
      在默认情况下,hadoop会使用/tmp目录作为临时文件存放地点,包括pid的文件: 

    Java代码  
    1. [hadoop@hadoop2 hadoop]$ cat  /tmp/  
    2. .esd-0/                                 Jetty_0_0_0_0_50075_datanode____hwtdwq/ orbit-gdm/  
    3. .esd-500/                               Jetty_0_0_0_0_8042_node____19tj0x/      pulse-oVhJlALLtsum/  
    4. [color=red]hadoop-hadoop-datanode.pid     [/color]         Jetty_0_0_0_0_8480_journal____.8g4awa/  pulse-rZOxQTGmpouA/  
    5. [color=red]hadoop-hadoop-journalnode.pid[/color]           Jetty_hadoop2_50070_hdfs____.roo38u/    pulse-v2bO3KgmFqB6/  
    6. [color=red]hadoop-hadoop-namenode.pid [/color]             Jetty_hadoop2_8088_cluster____2k46ah/   ssh-ZAuFHp2599/  
    7. hadoop-hadoop-zkfc.pid                  keyring-5PcL7q/                         .X0-lock  
    8. hsperfdata_hadoop/                      keyring-DGU27L/                         .X11-unix/  
    9. .ICE-unix/                              keyring-prSBtx/                         [color=red][color=orange]yarn-hadoop-nodemanager.pid[/color][/color]  
    10. Jetty_0_0_0_0_50070_hdfs____w2cu08/     keyring-wrTBmk/                         [color=darkred]yarn-hadoop-resourcemanager.pid[/color]  


      由于/tmp会定期清除(以前认为只有在重启的时候,tmp才会清除,后来李天王提到由于tmpwatch的作用,会定期每隔240小时删除tmp的内容),会将pid清除,pid不存在的时候,就会报no *** to stop 

    Java代码  
    1. [hadoop@hadoop2 hadoop]$ cat  /tmp/yarn-hadoop-resourcemanager.pid   
    2. 5232  
    3. [hadoop@hadoop2 hadoop]$ rm /tmp/yarn-hadoop-resourcemanager.pid   
    4. [hadoop@hadoop2 hadoop]$ yarn-daemon.sh  stop resourcemanager    
    5. no resourcemanager to stop  


      
    那么此时该怎么做呢,我之前的做法就是很粗暴的kill -9 pid关闭进程,幸亏由于hadoop的editlog日志机制,保证了数据不会丢失,若是其他。。。 



      学习一下脚本,可以看出hadoop在关闭进程的时候是采取了比较保险妥当的方式。首先使用kill 而不是使用kill -9 来关闭进程。 
      另外朋友们在平时运维的时候要首先使用kill TARGET_PID。kill -9的这种比较粗暴的方式,还是少用,之前使用在hadoop 升级实验的时候,在hdfs namenode -upgrade 之后,就直接使用kill -9 pid,居然java 虚拟机抛出了致命错误。 
      虚拟机日志我作为附件放上去,希望有虚拟机方面的大牛能给我分析。。。 

    总结:1.修改你的hadoop的hdfs以及yarn的tmp目录,都要修改哦。 
      2.关闭hadoop的时候请尽量使用kill 。

  • 相关阅读:
    leetcode-剑指19-OK
    leetcode-剑指38-?
    leetcode-剑指36-OK
    leetcode-剑指41-OK
    leetcode-剑指20-OK
    leetcode-剑指16-OK
    nginx重写路由隐藏入口文件报错引发的思考
    Go之并发
    Go之接口
    Go实现学生管理系统
  • 原文地址:https://www.cnblogs.com/zhwl/p/3672859.html
Copyright © 2011-2022 走看看