1.将spark streaming 服务jar放到指定目录中,创建启动脚本,后台启动将日志重定向到指定目录
nohup /opt/cloudera/parcels/SPARK2-2.1.0.cloudera1-1.cdh5.7.0.p0.120904/lib/spark2/bin/spark-submit --class pj.streamservice.Main --master yarn --executor-memory 512M --total-executor-cores 1 --num-executors 1 --conf spark.streaming.stopGracefullyOnShutdown=true --conf spark.streaming.backpressure.enabled=true --conf spark.streaming.backpressure.initialRate=100000 --conf spark.streaming.kafka.maxRatePerPartition=10000 /root/sparkstreaming_work/pj-streamservice-error-question-dinc-1.0.0.jar >> /data/tmp/sparksteaming/logs/error-question-dinc_`date +"%Y%m%d%H%M%S"`.log 2>&1 &
2.我的两个服务产生的文件如下所示
3.创建文件job_name,写入如下内容,读者根据自己的日志文件名称写入
vi job_name
error-question-dinc
similar-question-dinc
4.创建shell监控脚本,内容如下,根据自己的实际情况修改文件目录位置
#!/bin/bash
eche `date`
for jn in `cat job_name` ;
do
file_name=`ls -lt /data/tmp/sparksteaming/logs | grep $jn | head -n 1 |awk '{print $9}'`
now_date=`date +%s`
file_date=`date +%s -r /data/tmp/sparksteaming/logs/${file_name}`
echo ${file_name}
sub_date=$((${now_date}-${file_date}))
echo $sub_date
#我的sparkstreaming任务是30秒处理一次,所以这里设置了35秒
if(($sub_date>35));then
echo "服务异常,重启服务!"
job_id=`ps -ef | grep $jn | grep -v grep | awk '{print $2}'`
if(($job_id==''));then
echo "无异常服务,正常重启!"
`sh /root/sparkstreaming_work/monitor/run_job/pj-streamservice-$jn.sh`
else
echo "有异常服务,杀死异常服务后重新启动!"
`kill -9 $job_id`
`sh /root/sparkstreaming_work/monitor/run_job/pj-streamservice-$jn.sh`
fi
else
echo "服务正常!"
fi
done
5.配置定时运行,进行服务监控
这里做快是一分钟运行一次
vi /etc/crontab
加如下面内容
* * * * * root cd /data/tmp/sparksteaming/logs; sh monitor.sh > monitor.sh.log 2>&1