Spark Streaming 监控,Spark Streaming 失败重启,Spark Streaming 卡住重启。
作者:草小诚(wellsmile@foxmail.com)
转载请注原文地址:https://blog.youkuaiyun.com/cxcjoker7894/article/details/89350437
本没想写这篇,因为这种监控方式并不限于spark,而是linux进程通用的监控方式,但发现我的另一篇【Spark Streaming 任务定时清零重启】,很多人都是搜索了失败重启才点进的,既然有需求就写一下,很简单。
Spark Streaming 异常分两种:一种是处理逻辑中代码抛异常了,一种是没有异常但是因为各种原因停止继续计算了。对于监控来说区别就在于前者Job进程会死掉,而后者Job进程还会存在。
思路:
- 定时监测Spark Streaming 进程,如果死掉了就重新启动。
- 定时查看计算结果,如果发现计算停止了就手动杀掉进程,同样由第1点负责重启。
第1点实现:
由于是crontab,先常规source环境变量,PS1为带有spark streaming字样的进程数量(如果不止一个job则自行区分),如果为0则可判断进程死亡,则添加1分钟后重新启动的定时任务,其中 start_spark.atfile 为启动spark的at命令文件,是为了在后台启动。
#!/bin/bash
source /etc/profile
PS1=$(ps -ef | grep spark_streaming.py | grep -v grep | wc -l)
if [ $PS1 -eq 0 ];
then
/usr/bin/at now +1 minutes -f /log/logging/info/spark-streaming/atfile/start_spark.atfile
else
echo 'Spark Streaming is running.'
fi
第2点实现:
这个就因人而异了,总之看自己的计算结果中时间如果太长了,就可以判定为spark卡住了,杀之即可,杀掉后就不用管了,上面第1点的脚本会重启好的。这里再附上杀进程的脚本。
#!/bin/bash
source /etc/profile
PS2=$(ps aux | grep spark_streaming.py | grep -v grep)
IFS=' '
arr=($PS2)
spark_pid=${arr[1]}
kill -9 $spark_pid
echo 'killed spark'
有个注意点:
如果在Job中维护了状态(state),重启之后会导致状态的丢失,如果想要追回状态,需要将计算源重新过一遍,比如文件流(textFileStream)就要在重启之后将文本重新append到监听目录一遍。
第1点的进程重启监控适用于所有常规linux进程。