Spark Web UI 監控詳解


Spark集群環境配置

我們有2個節點,每個節點是一個worker,每個worker上啟動一個Executor,其中Driver也跑在master上。每個Executor可使用的核數為2,可用的內存為2g,集群中所有Executor最大可用核數為4。

conf/spark-defaults.conf 部分參數配置如下:

  spark.master                     spark://Master:7077
  spark.executor.memory            2g
  spark.executor.cores             2
  spark.cores.max                  4

在提交jar包的時,按照需求分配executor的核數和memory數給不同的應用,若某個應用占用了所有的核和內存,剩下的應用只能等待這個程序執行完畢釋放資源后才可執行。

conf/spark-env.sh 部分參數配置如下:

export SPARK_WORKER_CORES=2   
export SPARK_WORDER_INSTANCES=1
export SPARK_WORKER_MEMORY=2g

執行節點負載均衡問題

比如啟動四個節點,但是在處理數據的時候負載不均衡,只有兩個節點的使用率很高。可以推測與分區數有關,測試數據集為267MB,hdfs中默認的數據分片大小為128MB,約有兩個分區。推測只有兩個分區能拿到數據進行計算,所以將hdfs的數據分片大小改為64MB,這樣約有4個分區,與集群中的Executor數目相符。經測試證明,負載不均衡的問題得到解決。

修改配置文件hdfs-site.xml,將block size設置為64MB

 <property>
   <name>dfs.block.size</name>
   <value>67108864</value>   說明:64M=64*1024*1024
 </property>

8080

如上圖所示,此頁面自上而下包括:

spark版本信息,

spark master 的URL(worker用來連接此master的URL)

worker的數量:4

所有worker節點中可用和在用的core(查看資源的使用情況,參考是否適合再啟動一個應用等)

所有worker節點中可用和在用的memory(如上)

正在運行和已經完成的應用數量

master當前狀態

workers部分

  • 展示集群中每個worker的位置,到當前狀態,內核使用情況,內存使用情況

(通過查看內核和內存的用量情況確定是否足夠運行一個新的應用)

  • 點擊workerID進入worker的detail頁面會顯示與該worker更詳細的信息

(理想情況下,所有worker節點使用的內核數和內存應該是相同的,如果出現使用率不同的情況,說明集群資源未平均分配,應用未最佳化運行,需停止所有應用重新啟動集群)

Running/Completed Application部分

  • 分別展示在運行和已經運行完的應用信息,包括名稱,獲得的資源,開始時間,所有者,已運行時間,目前狀態(RUNNING/FINISHED/結束原因)

(若state顯示WAITING,則說明Spark對於應用沒有足夠的內存或內核,將保持等待直到有足夠資源可用,有幾種情況,一是直到已經在運行的一個應用完成運行,二是增加分配給spark worker的資源,三是將少應用的請求資源)

  • 點擊ApplicationID進入detail頁面會顯示看到關於該應用運行時的詳細信息,包括參與的worker/使用的資源數/日志等

(如果一個任務失敗或拋出了異常,可以查看stderr文件來調試問題)

4040

localhost:4040(當應用在運行中的時候可以訪問,一旦應用執行結束該端口關閉不可訪問)

如下圖,顯示基本的運行時間,調度模式(FIFO為先進先出),不狀態中作業的統計量,並顯示正在運行/已經完成/運行失敗的spark作業較為詳細的信息列表,例如,Job的提交時間/運行時間/目前為止每個Job完成的Stage和Task數量等
(從運行時間項可以觀察到,若某一個Job花費時間異常,可以把問題縮小到該Job下的Stage或者Task)

點擊某JobID,進入detail頁面顯示如下信息:
該Job當前狀態

活躍/延遲/已完成的Stage數量

該Job的事件時間線
[spark為該Job生成的DAG的可視化呈現]

表格部分的信息有助於定位性能問題,檢查Duration列是否存在運行時間異常的Stage,Tasks表明一個Stage內的並行量(根據集群大小,太少或太多可能導致性能問題)。數據Shuffle會對應用性能造成負面影響,所以要最小化Shuffle Read和Write數量。

DGA可視化

Stage

點擊某Stage,進入detail頁面顯示如下信息。

Summary 部分

若任務持續時間在任一個四分位處過高,則說明有問題。可能是分開太大,也可能是數據Shuffle的負面效應。也可以檢查GC活動是否影響性能。

Executor的聚合信息部分

可以有效找出處理緩慢的任務,檢查GC時間

Locality Level(數據的區域級別)

標明任務所處理的數據是緩存在內存中的(PROCESS_LOCAL),還是本地讀取(NODE_LOCAL),還是來自於集群中的任意節點(ANY)。以PROCESS_LOCAL級別處理數據是極快的。

事件時間線監控,顯示了每個worker節點上並行運行了多少個任務,已經增加任務完成所需的總時間

Storage頁顯示Spark應用緩存在內存或硬盤中的數據量,提供每一個持久化RDD的信息。(可以是以Hive表格或者是RDD的形式緩存在內存中)

Storage Level展示數據集如何緩存,以及所緩存數據的副本數量。

點擊具體的RDDID,進入detail頁。包括:

緩存RDD的概要信息

在不同EXecutor上的分布(每個Executor上需要的內存)

分塊信息,如存儲級別/位置/每個緩存RDD分塊大小

Enviroment頁面顯示不同環境和配置變量的值:

Executor顯示Spark為該應用創建的執行者的概要信息:

Storage Memory表示緩存數據所預留的和所使用的內存量(若內存小於正在嘗試緩存的數據,則會出現性能問題)

Shuffle的讀寫都是昂貴的,如果這兩個值過大,應該重構應用代碼或者調整Spark參數減少Shuffling

18080

localhost:18080(spark的歷史管理中心,包含所有已經運行完成的Application及其詳細信息)

點擊具體的APP ID 展現的頁面結構與4040相同

50070

  • master:50070 訪問namenode的hdfs web UI監控頁面
    (理想情況下,Summary下的表格右邊是有正常數據的而不是0)

  • 查看已經啟動的datanode信息

  • 查看文件目錄

總結

本文主要介紹spark webui相關的監控頁面指標信息。在我們排查問題,做性能優化時,了解spark監控項可以幫我們快速定位問題的症結,因而需要我們對相關監控頁面的地址以及里面的監控項要非常了解。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM