하둡 stop-all.sh 실행시 DataNode, TaskTracker가 안꺼질때
$HADOOP_HOME/conf 디렉터리에서
hadoop-env.sh
hdfs-site.xml
core-site.xml
mapred-site.xml
masters
slaves
위 파일들을 잘못 설정하면 정상적인 스타트업이 안된다.
이 경우 보통 오타가 문제인데 오타는 찾기도 힘들고 찾을때 힘들일수록 자괴감은 더욱 커진다 -0-
단도직입적으로 이번에 서버3(datanode02)에서 datanode와 tasktracker가 start-all때는 켜지는데 stop-all시에는 꺼지지 않았기 때문에 확실히 오타문제는 아닌거 같았다.. ~0~
그래서 일단 kill -9 pid 로 죽이고나서 다시한번 start-all.sh을 실행 하였다
하둡을 스타트업 시키면 노드들의 스타팅 내역과 결과가 뜬다
start-all.sh
starting namenode, logging to /home/project/hadoop/libexec/../logs/hadoop-project-namenode-namenode.out
datanode02: starting datanode, logging to /home/project/hadoop/libexec/../logs/hadoop-project-datanode-datanode02.out
datanode02: /home/project/hadoop/bin/hadoop-daemon.sh: line 138: /tmp/hadoop-project-datanode.pid: Permission denied
snamenode: starting datanode, logging to /home/project/hadoop/libexec/../logs/hadoop-project-datanode-snamenode.out
snamenode: starting secondarynamenode, logging to /home/project/hadoop/libexec/../logs/hadoop-project-secondarynamenode-snamenode.out
starting jobtracker, logging to /home/project/hadoop/libexec/../logs/hadoop-project-jobtracker-namenode.out
datanode02: starting tasktracker, logging to /home/project/hadoop/libexec/../logs/hadoop-project-tasktracker-datanode02.out
datanode02: /home/project/hadoop/bin/hadoop-daemon.sh: line 138: /tmp/hadoop-project-tasktracker.pid: Permission denied
snamenode: starting tasktracker, logging to /home/project/hadoop/libexec/../logs/hadoop-project-tasktracker-snamenode.out
보통 이 내역만 잘봐도 삽질의 depth가 줄어든다...
내역만 봐서 잘 모르겠거나 이미 콘솔에서 사라진 이전 내역을 보고싶다면 $HADOOP_HOME/logs를 뒤져보면 된다@@
위의 내역을 보면 서버3(datanode02)의 하둡 대몬이 아래 두 곳에 datanode와 tasktracker의 pid파일을 생성하고 싶어하는데 권한이 거부된다고 나온다.
/tmp/hadoop-project-datanode.pid
/tmp/hadoop-project-tasktracker.pid
그렇기때문에 start-all때 일단 켜지긴 하지만 stop-all 때는 pid를 몰라서(혹은 이전에 저장된 잘못된 pid를 가져와서) 종료를 못하는 상황인 것 같다
그래서 /home/project/hadoop/bin/hadoop-daemon.sh 파일의 line 138근처를 보다가 좀 위로 올라가보니 hadoop_pid_dir가 디폴트로 /tmp로 지정된다는 의미의 if문이 있었다
if [ "$HADOOP_PID_DIR" = "" ]; then
HADOOP_PID_DIR=/tmp
fi
HADOOP_PID_DIR를 project 홈디렉토리 하위 어딘가로 바꿔줘야 하는데..
여기서 if문 안에 then절의 내용을 바꿔 주거나 (비추천)
아니면 hadoop-env.sh의 export HADOOP_PID_DIR=/tmp 환경변수를 주석을 풀고 바꿔준다