前言
本文主要是圍繞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進行處理。