運(yùn)行監(jiān)控對(duì)系統(tǒng)的重要性不言而喻,尤其是分布式環(huán)境中鸽心,程序運(yùn)行是否正常秋茫,在哪些節(jié)點(diǎn)上運(yùn)行史简,每個(gè)節(jié)點(diǎn)處理的數(shù)據(jù)量是否均勻,每個(gè)任務(wù)的處理時(shí)間是否大致均衡肛著,在流處理程序中每個(gè)批次是否能及時(shí)處理圆兵,是否有批次延遲,這些信息都是必須要監(jiān)控的重要信息枢贿,也是程序優(yōu)化的基礎(chǔ)殉农。對(duì)于以上信息可以通過(guò)spark自帶的WEB UI來(lái)監(jiān)控,默認(rèn)已經(jīng)開啟萨咕。spark也提供了與第三方監(jiān)控系統(tǒng)的接口统抬,本文只介紹spark自帶的WEB UI中的監(jiān)控信息。
每個(gè)程序的啟動(dòng)會(huì)占用driver側(cè)一個(gè)端口危队,默認(rèn)為4040聪建,由參數(shù)spark.ui.port控制。
可以在driver側(cè)的配置文件中設(shè)置默認(rèn)端口或提交運(yùn)行時(shí)通過(guò)參數(shù)指定 --conf spark.ui.port=4141
當(dāng)然也可以在代碼中寫死val conf = new SparkConf().set("spark.ui.port","4141")
如果在同一臺(tái)機(jī)器上會(huì)提交大量作業(yè)時(shí)需要注意茫陆,如果默認(rèn)端口已被占用金麸,會(huì)在此端口基礎(chǔ)上+1再試,不行再+1一直持續(xù)到成功或超過(guò)spark.port.maxRetries
指定的次數(shù)還沒有成功的話簿盅,任務(wù)啟動(dòng)失敗挥下,所以這種情況最好通過(guò)參數(shù)--conf spark.ui.port=xxxxx
給每個(gè)作業(yè)都指定端口。
以下界面分別spark應(yīng)用開發(fā)-開發(fā)工具篇介紹的兩個(gè)示例程序的監(jiān)控頁(yè)面桨醋。
//spark
//spark streaming
相對(duì)于spark程序spark streaming程序的web ui中除了"Jobs"棚瘟、"Stages"、"Storage"喜最、"Environment"偎蘸、"Executors"外還多了一個(gè)“streaming”標(biāo)簽。
Jobs: job列表,顯示每個(gè)作業(yè)的時(shí)間信息以及共有多少stage以及task迷雪,可以鏈接到具體的stages頁(yè)面,這個(gè)頁(yè)面需要重點(diǎn)關(guān)注每個(gè)job的時(shí)間限书,以及是否有作業(yè)有大量的失敗的任務(wù)。
Stages :Stage列表章咧,顯示stage的輸入倦西、輸出以及Shuffle讀寫的數(shù)據(jù)量,并且可以鏈接到每一個(gè)task的執(zhí)行情況赁严,包括執(zhí)行次數(shù)扰柠,task狀態(tài),locality級(jí)別误澳、GC時(shí)間耻矮,輸入、輸出數(shù)據(jù)量等等忆谓,這里面需要重點(diǎn)關(guān)注task的執(zhí)行時(shí)間裆装,gc時(shí)間,以及各task花費(fèi)時(shí)間相差是否不大倡缠。
比如下圖中有任務(wù)第一次沒有執(zhí)行成功
locality_level按優(yōu)先級(jí)高低排:PROCESS_LOCAL哨免,NODE_LOCAL,NO_PREF昙沦,RACK_LOCAL琢唾,ANY。也就是最好在同個(gè)進(jìn)程里盾饮,次好是同個(gè)node(即機(jī)器)上采桃,再次是同機(jī)架,或任意都行
Storage: 存儲(chǔ)情況
Environment:環(huán)境信息丘损、各種各樣的參數(shù)信息普办。可以在這里看到實(shí)際spark.ui.port是多少
Executors :executor列表徘钥,在這里查看到各個(gè)executor輸出的日志衔蹲,如下圖就是一個(gè)實(shí)際程序的截圖,可以通過(guò)stdout/stderr查看日志呈础。
streaming: 顯示每個(gè)批次有多少數(shù)據(jù)舆驶,總共處理了多少批次,每個(gè)批次處理花費(fèi)的時(shí)間而钞,是否有批次延遲等信息沙廉,如下圖是一個(gè)正運(yùn)行的streaming程序的監(jiān)控頁(yè)面。
重點(diǎn)需要關(guān)注的是active batches臼节,如果active batches下面的批次大于1則證明有延遲批次
streaming statistics:中顯示的事件的數(shù)據(jù)接收泰涂、調(diào)度延遲、處理時(shí)間胜宇,合計(jì)延遲的統(tǒng)計(jì)信息迂卢。
completed batches :已完成批次(只顯示是最近)的信息,可以通過(guò)鏈接進(jìn)行具體的Job中途凫。如果發(fā)現(xiàn)某批次處理時(shí)間有異常垢夹,可以通過(guò)鏈接看到具體的Job信息,進(jìn)而查看到stage,最終追蹤到具體的task中维费,比如下圖就是“Stage”標(biāo)簽中果元。
spark on yarn中的監(jiān)控
spark on yarn在的環(huán)境中,要通過(guò)yarn的頁(yè)面才能正確進(jìn)入到監(jiān)控頁(yè)面犀盟。如下圖點(diǎn)tracking ui才能正確進(jìn)入頁(yè)面而晒。
其它
還可以用腳本通過(guò)http://localhost:4040/mertics/json獲取的json格式的監(jiān)控信息,格式類似下面
可以用python很容易的解析出來(lái)具體內(nèi)容阅畴,最近一批次消息數(shù)據(jù)倡怎,處理延遲、處理時(shí)間等的信息贱枣。