天天看點

通過可視化更好的了解你的Spark應用

圖的最大價值是它會推動我們去注意到那些我們從未預料到的東西。

– john tukey

spark 1.4中對spark ui進行改進,更加突出可視化的效果。我們來看一下他的主要的改動,主要包含三個方面:

spark事件的時間線視圖

執行的dag圖

spark streaming 的可視化統計資料

這一篇主要會将前面的2塊,最後的一塊請見下一篇

從早前的版本開始spark events就已經是spark api的一部分了。在最新的版本裡面,spark ui會在時間線上顯示這些events,讓events的相對的順序和交織能夠一目了然。

時間線視圖在三個層次上有效:所有的job,單個job以及單個stage

在預設展示頁上,時間線顯示一個應用中包含所有作業的spark events。見下圖

通過可視化更好的了解你的Spark應用

events的順序在這裡是非常簡單的。在所有的executors都注冊上來以後,應用并行運作了4個job,其中一個失敗了其他的都成功了。然後,當所有的job都完成以後,應用退出了。executors也都被移除了。讓我們點選其中一個job

通過可視化更好的了解你的Spark應用

此作業運作word count統計3個檔案,并在最後join結果。從時間軸看,很顯然,3個word count并行運作,因為它們不依賴于對方。然而,最後的join依賴于3個stage的結果,并是以需要等待3個stage結束才能開始。讓我們進一步看看裡面的一個階段。

通過可視化更好的了解你的Spark應用

這個stage有20個partition(不是全部顯示)傳播橫跨4台機器。每個條代表stage的單個任務。從這個時間視圖,我們可以得到有關這個stage的幾點啟示。首先,整個機器的partition分布相當不錯。其次,大多數的task執行時間是大于網絡或i / o的開銷,因為我們shuffle的資料非常少。第三,我們可以通過配置設定給executor更多的core來提高并行的程度;目前看來,每個執行器可同時執行不超過兩個任務。

我想借此機會展示在spark中使用時間視圖的另一個特點:動态配置設定。該特征允許spark基于負載動态的縮放executor的數量,這樣叢集資源得到更有效的共享。讓我們來看看時間視圖上的表現。

通過可視化更好的了解你的Spark應用

首先要注意的是,應用在job過程中獲得executors,而不是提前保留它們。然後,在第一個job結束後不久,用于該作業的executors變為空閑并傳回到叢集中去。這就允許同一叢集中運作的其他應用在其間來使用他們,進而增加群集使用率。隻有當一個新的job進來的時候,我們的spark應用程式才需要全新的一組executors來運作它。

能夠通過時間線視圖來檢視spark events對确定應用程式中的瓶頸非常有用。接着下一步就能夠把一個特定的task或者stage映射到spark操作上去,找到原因。

第二個增加到spark中的可視化是每一個job的執行的dag。在spark中,job與一個組織在有向無環圖(dag)中的rdd的鍊關聯在一起, 看起來像下面這樣:

通過可視化更好的了解你的Spark應用

這是一個簡單的word count job。首先,它執行了一個textfile的操作來讀取在hdfs上的輸入檔案,然後flatmap操作會split每一行成為獨立的單詞,然後把他們映射成(word,1)這樣的pair,最後使用reducebykey操作來對word的數量求和。

藍色框指的是使用者在他/她的代碼調用spark操作。在這些框裡的點代表對應操作下建立的rdds。該操作本身是由它們所在的stage來劃分的。

從這個可視化中我們能有所發現。首先,它的spark的流水線優化并不是由shuffle階段來分割的。尤其是,從hdfs讀取輸入partition後,每個執行程式直接在task中執行flatmap和map,避免了與其他的stage産生影響。

其次,rdds其中之一被緩存在第一個stage(綠色高亮)。由于操作包括了從hdfs讀,緩存了這個rdd意味着将來在此rdd關聯計算的時候可以從存儲器而不是從hdfs來快速的通路這部分原始檔案的子集。

dag可視化的複雜的job上會有最明顯的價值。舉個例子,在mllib的交替最小二乘(als)執行計算兩個因子矩陣疊代的近似結果。這涉及到一系列的map,join,groupbykey等操作。

通過可視化更好的了解你的Spark應用

值得注意的是,在als ,在正确的地方緩存對于性能來說至關重要,因為該算法重用在每個疊代中前一次計算的結果。随着dag可視化,使用者和開發人員現在可以一眼找出rdds是否正确緩存,如果沒有,也很快明白為什麼一個實作的速度很緩慢。

和時間線視圖一樣,dag允許使用者點選進入一個stage并展開其内部的詳細資訊。見下圖。

通過可視化更好的了解你的Spark應用

在stage視圖,所有屬于此階段的rdds的細節會自動展開。現在使用者可以快速找到具體的rdds資訊而不必用滑鼠在上面懸停來擷取資訊尋找要的點。

最後,我想強調一下dag可視化和 sparksql之間的一個初步的內建。對比更接近實體實體層面的spark操作,spark sql使用者顯然更熟悉一些進階操作,是以一些進階操作更需要被可視化。其結果類似将一個sql查詢計劃映射到底層執行的dag。

通過可視化更好的了解你的Spark應用

spark streaming的可視化部分也在1.4中內建了,不過會在另一個獨立的介紹中放出。

在不久的将來,spark ui會了解更進階别的庫的語義,進而提供更多相關的細節。spark sql将會有自己獨立的标簽。而spark core,當你滑鼠懸停在rdd上的時候一些額外的資訊類似partition的數量,調用點,緩存百分比都會在dag上展示。

原文出處

<a href="https://databricks.com/blog/2015/06/22/understanding-your-spark-application-through-visualization.html">https://databricks.com/blog/2015/06/22/understanding-your-spark-application-through-visualization.html</a>

繼續閱讀