hadoop知识点记录

问题一:No nodemanager to stop

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的文件.

由于/tmp会定期清除(以前认为只有在重启的时候,tmp才会清除,后来李天王提到由于tmpwatch的作用,会定期每隔240小时删除tmp的内容),会将pid清除,pid不存在的时候,就会报no *** to stop 。nodemanager的pid文件名为:yarn-${hadoop-user}-nodemanager.pid.

解决:类似问题都可以解决:在hadoop的hadoop-env.conf,yarn-env.sh或者hbase-conf.sh中修改文件中的PID配置项:HADOOP_PID_DIR,YARN_PID_DIR,HBASE_PID_DIR

2.reduce如何决定把拷贝过来的map结果存入内存还是存入磁盘?

         远程拷贝过程中,每次拷贝一个数据块时,若该数据块可以放入内存则放入内存,否则放入硬盘。有两个标准决定该数据块是否应该放入硬盘:(1) 数据块小于 java_heaps _size * mapred.job.shuffle.input.buffer.percent * MAX_SINGLE_SHUFFLE_SEGMENT_FRACTION(0.25) (2) 内存中有足够空间放入该数据块。

猜你喜欢

转载自zhangxiong0301.iteye.com/blog/2198416