最近hadoop集群的namenode节点频繁宕掉,看日志发现是内存溢出,现有的机器已经将内存加到极限,因为扩容申请还没下来所以只能依靠shell来干事了,不然看电影的时候namenode挂掉是多么蛋疼的一件事。废话不多说,脚本如下:
#!/bin/bash
while true;do
echo "************************************************************"
date
echo "PID of this script: $$" > /home/java/MONITOR_PID
# ================================================================
TCPListeningnum=`netstat -an | grep ":50070" | awk '$1 == "tcp" && $NF == "LISTEN" {print $0}' | wc -l`
if [ $TCPListeningnum -eq 0 ]
then
{
echo "`date` : listener port is down">>/home/java/namenode_down.log
#如果50070端口down了,重启namenode服务
cd /data/run/hadoop-2.5.0-cdh5.3.0/sbin/
./hadoop-daemon.sh stop namenode
./hadoop-daemon.sh start namenode
}
else
{
echo "`date` : 50070端口正常" >>/home/java/namenode.log
date
}
fi
sleep 5;
done
目前看来只需要监控50070端口就行了,端口不在则重新启动namenode。启动脚本的命令:
nohup sh monitor.sh /dev/null 2>&1 &