为了监控集群JobTracker的健康状态,一般会定时运行一个测试作业,当然这个测试作业数据量不能太大,而且这个作业运行时间不能太长,以下就是我们用于监控集群JobTracker是否能高效提供服务的脚本,由于shell没有提供超时的机制,只能自己去实现,具体脚本如下:
#!/bin/bash
HADOOP_EXE="/opt/sohuhadoop/hadoop/bin"
zabbix_ip="**.**.**.**"
maillist="****@sohu-inc.com"
mobilelist="******"
#10分钟运行不完,短信报警
TIMEOUT=600
#打印日志函数
function log(){
echo `date +"[%F %T]"` "$*"
}
#短信报警函数
function sendSms(){
log "job run exceed $TIMEOUT"
ssh $zabbix_ip "sh /opt/apps/zabbix/sbin/sendsms.sh ${mobilelist} \"test job running exceed $TIMEOUT\""
}
#超时函数
function timeout(){
waitfor=$1
shift
command=$*
$command &
commandpid=$!
( sleep $waitfor ; sendSms ) &
watchdog=$!
sleeppid=$PPID
wait $commandpid > /dev/null 2>&1
kill -9 $watchdog > /dev/null 2>&1
kill $sleeppid > /dev/null 2>&1
}
#提交作业函数
function submitjob(){
INPUT="/user/hadoopmc/test/input"
OUTPUT="/user/hadoopmc/test/output"
JAR=`find /opt/sohuhadoop/ -name *example*.jar`
log "hadoop fs -rmr $OUTPUT"
su - hadoopmc -c "hadoop fs -rmr $OUTPUT"
log "submit job to test cluster health!"
su - hadoopmc -c "hadoop jar $JAR wordcount $INPUT $OUTPUT"
log "job running end!"
}
#提交作业,并检查作业是否超时,超时则报警
timeout $TIMEOUT submitjob