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進行處理。

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