Spark应用中断监控

前言

本文主要是围绕spark on yarn cluster模式运行spark应用。在实际应用中,会碰到这种情况,应用被中断、应用未中断但是不执行计算、应用中某些任务失败等。我们将应用部署后,不可能时时都关注,当应用被中断时,怎么能尽快恢复应用的正常运行。我这里采用脚本+服务监控的方式进行维护。

实践

一般情况下,查看应用的运行情况,我的流程:

那么我的脚本+服务监控方式是围绕上述流程图中的yarn application --list开展的。

脚本监控思路:查看yarn application --list中是否有指定的应用,没有就执行重启操作,并记录日志;有则忽略。

脚本示例:

#!/bin/sh
#应用名称
appArr=(app1 app2)
time=$(date "+%Y-%m-%d %H:%M:%S")
#标记变量
t=0
flag=0
#对比$appArr与yarn application --list
for app in ${appArr[@]}
do
  for appRun in `yarn application --list`
  do
    if [ $app = $appRun ]
    then
        flag=1
        #echo "${time} appName($appRun) exists in yarn application list" >> /home/test/sparkMonitor.log
        break
    fi
  done
  if [ $flag -eq 0 ]
  then
      appNotRunArr[t]=$app
      t=`expr $t + 1`
  else
      flag=0
  fi
done
#检测没有运行的应用,执行重新启动命令
for appNotRun in ${appNotRunArr[@]}
do
  echo "${time} appName($appNotRun) start!" >> /home/test/sparkMonitor.log
  # start.sh指的是应用的spark-submit脚本。下述是重启应用,具体根据自己的实际情况
  cd /home/test/$appNotRun && ./start.sh
done

 

服务监控思路:根据yarn的对外接口,查看指定队列的执行状态的SPARK任务:

GET http://<rm http address:port>/ws/v1/cluster/apps?state=RUNNING&applicationType=SPARK &queue=your queue

将获取的结果与自己应运行的所有应用进行对比,将没有运行的应用发短信或邮件通知给负责人。

总结

文中提供的脚本+服务的方式一定程度上可以在应用中断的情况下重新启动,如果应用重启仍然失败的情况下,可以利用服务通知给负责人。至于应用运行中的job、stage、task监控,可以查看spark web ui进行处理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章