執行一個MapReduce時,應該監控些什麼
執行一個MapReduce時,應該監控些什麼
前言
本文討論的是,在以Yarn做資源管理的叢集上如何監控一個MapReduce程式。
一、概述
當我們執行一個MapReduceJob,或是執行一個Hive SQL(MapReduce為引擎),又或是Sqoop後,程式被提交給了叢集。對於開發、測試叢集執行程式的開發人員來說,剛剛接觸MapReduce的初學者往往是在命令列前等著程式執行完成,遇到執行緩慢、出現報錯很難做出有效的響應。本文希望通過對Yarn原生UI等監控手段的介紹,能使讀者對MapReduce進行有效監控。
二、在哪監控
1. Cloudera Manager的Yarn->應用程式
如果使用CDH叢集,我們可以在登陸ClouderaManager(以下簡稱CM)後,在Yarn的應用程式中看到近一段時間執行的程式的摘要,其中包括了起止時間、持續時間、狀態等資訊,右側額下拉框可以非常方便的停止一個正在執行的程式。但這裡只有一些概述,缺少明細,如每個map執行的情況等,我們可以點選藍色的applicationID,頁面就會跳轉到Yarn的原生介面中。
2. Yarn UI
我們推薦在Yarn的原生的Web UI中監控程式。
入口除了上例中提到的通過應用程式的applicationID跳轉外,也可以在Yarn->Web UI進入,其中ResourceManager(以下簡稱RM) WebUI中包括了近期全部程式的執行情況,HistoryServer(以下簡稱HS) WebUI中僅包含執行完成的(不包含被Kill掉的),並且在RM中檢視已經完成的程式明細時也需跳轉到HS中。關於能檢視多長時間的程式明細,與Yarn的RM、NodeManager(以下簡稱NM)等日誌留存情況有關。
當然最方便的是記下RM的IP和埠號8088,或者放在瀏覽器收藏夾裡。
由於原生UI各頁面地址通常都是hostname+埠,所以為了流暢的訪問,請在本地修改hosts增加叢集各個節點的地址,或者去改DNS伺服器。如果無法修改就得在訪問時去瀏覽器上改地址了。
3. Oozie和Hue
如果是用Oozie調起的程式,可以在Oozie 的WebUI或者Hue上看到任務的起止時間等概述資訊,此處不詳述。
三、 監控什麼
通常監控的內容包括程式的執行開始結束時間、狀態、資源佔用情況、日誌、報錯資訊等,另外對於一些程式中的其他元件,如程式讀寫Hbase的情況下,也要監控其他元件的情況。
因為Yarn WebUI上的監控資訊非常全面,CM上任務的摘要資訊也是來源於此,因此我們建議在需要監控程式執行時一直跟著這個頁面。如下內容以Yarn 的WebUI為例,說說監控通常有哪些內容。
1. Yarn WebUI整體
1.1 RM
l 左側導航欄
-Cluster
——About:RM狀態版本等資訊
——Nodes:NM列表及狀態和屬性
——Applications:任務列表及狀態和屬性(常用,迷路了就點這個吧! )
————NEW、NEW_SAVING……:篩選不同狀態任務
——Scheduler:資源佇列列表和狀態
-Tools
——Configuration:yarn配置
——Local logs:本地日誌
——Server stacks:堆疊
——Server metrics:指標
l 上方指標區
叢集指標、叢集節點指標、使用者指標
l 任務列表
Ø 右上角搜尋框(常用,任務找不到在這兒搜尋! )
Ø 起止時間、狀態、進度、任務名、資源使用等等,
Ø Tracking UI是進一步監控的入口(常用)
正在執行的任務顯示ApplicationMaster,已經完成的顯示History
1.2 HS
這裡只有執行完的,Kill掉的都可能不會有,介面類似RS就不詳述了,補充一點:
最下方的這些搜尋框可以做篩選用
2. MapReduce Job介面
點了ApplicationMaster之後進入一個job的介面,mapreduce、spark會進入不同的介面,本文只討論MapReduce。
再點選具體的Job ID,就來到了下圖這個介面。(常用,簡而言之就盯著這裡吧! )
l Job的時間和狀態
有開始時間(Started)和持續時間(Elapsed),狀態(State)。
l ApplicationMaster資訊
l Map和Reduce不同狀態下的個數統計
進度條(Progress)、合計(Total)、掛起(Pending)、執行中(Running)、完成(Complete)
Ø 如果map或reduce程序數太少,要考慮資料來源的特性或程式設定,例如以Hbase為資料來源時,Map的個數=源表region的個數。
Ø Pending的原因,對於Map來說通常都是因為資源不足,對於reduce來說還可能是在等Map結束。
l Map和Reduce不同狀態下的個數統計2
新增(New)、執行中(Running)、失敗(Failed)、殺死(Killed)、成功(Successful)
Ø reduce會等map全部結束才真正開始
Ø 如果有失敗的,一定點進去看看!
Ø Kill可能是某個map或reduce失敗超過重試次數後,其他的就會被kill掉
3. Task介面
點選這些帶下劃線的數字會進入到對應狀態的map或reduce task中,例如點選Maps的Failed列的數字進入到報錯的map列表中。
Ø Attempt的末位編號是重試的次數,重試第3次之後如果還是失敗,這個MR就整體失敗了,所以當你認為報錯不會因重試就能解決的時候,直接去Kill掉你的程式,根據報錯資訊去排查問題吧,不要放在這裡浪費計算和儲存資源。
Ø Node是執行這個map或reduce的NM,有助於判斷一些環境問題,例如報錯都集中在一個節點上,或者執行緩慢的都在這一個節點上,可能說明了資料傾斜、該節點資源不足、該節點有硬體問題等。
Ø 起止時間和持續時間,常用來尋找執行時間最長的任務。
Ø Note中是報錯概要資訊
Ø 點選log去看更詳細的日誌
4. 日誌和報錯資訊
正在執行的和已經完成的任務分別在RM和HS上,點選log後會稍有差別,但都會顯示3種日誌stderr(報錯資訊)、stdout(標準輸出)、syslog(log4j日誌),
Ø 報錯資訊stderr
上一步的Note中的報錯不夠具體,請一定點到這裡來看具體資訊!點選有下劃線的here可以展開。
Ø stdout
這裡有Map和Reduce中System.out.print的結果,但是可以少量列印除錯程式,但是請注意上線的程式不要留下System.out.print!這樣會拖慢程式,還可能會佔用大量儲存和IO資源!
Ø syslog
這裡有更加詳細的資訊供排查問題,比如對於讀取Hbase表的程式來說,會有表名、region的name,startRow和EndRow等。
5. 統計資訊
點選左側導航欄中Job下的Counters,這裡有很多統計資訊,比較常用的是map和reduce的記錄數和大小。
6. 總結
一句話總結,從Yarn WebUI或CM中查詢到你的Job,在Job的詳情頁中監控你的Job,如果有Failed進去看日誌,如果執行慢進去看日誌。