前言
Spark作為計算引擎每天承載了大量的計算任務,為了監控集群的資源使用情況,對spark的監控也在所難免,Spark的監控有3個入口,1. Rest; 2.另一個是Metrics; 3. Log。
Rest
參考spark的rest接口文檔
http://spark.apache.org/docs/latest/monitoring.html
spark支持把每個計算實例的執行信息寫到hdfs,然后通過historyserver或者自己去hdfs上找到文件解析出來。數據包括spark執行關鍵點,job,stage,task,數據種類上大致和MapReduce收集的內容差不多,主要是jvm,資源,shuffle,io這四個方面。
Metrics
默認情況spark不打開metrics,也就是沒有metrics數據,可以看配置conf/metrics.properties,默認都是被注釋掉的。Spark內置了多種metrics的sink方式,控制台,csv,slf4j等。
案例
打開基於控制台的metrics sink。如圖1,將3個配置的注釋去掉,將metrics信息每過10s打印到控制台上。如圖2,spark會將內存信息,job調度信息以及其他一些信息打印出來。
圖1
圖2
Log
Spark在on yarn模式下,日志由yarn統一管理,一般情況,我們會選擇把yarn的日志聚合功能打開,spark的日志也會跟着上傳到hdfs上,這樣自己去解析日志也會很容易。如果想要通過日志來監控spark任務執行情況,那么可能會需要業務層面的埋點,否則只能針對一些異常日常進行監測。
總結
Spark由於本身只是計算執行引擎,沒有常駐進程(history server不算),所以在監控層面相對比較靈活,但是也有復雜的地方。當每天有成千上萬個spark任務提交到集群執行的時候,那么需要監控的數據量就上來了,粒度越細,監控的壓力越大。