Spark的可視化做業管理

在過去,Spark UI一直是用戶應用程序調試的幫手。而在最新版本的Spark 1.4中,咱們很高興地宣佈,一個新的因素被注入到Spark UI——數據可視化。在此版本中,可視化帶來的提高主要包括三個部分:算法

Spark events時間軸視圖緩存

Execution DAG網絡

Spark Streaming統計數字可視化函數

咱們會經過一個系列的兩篇博文來介紹上述特性,本次則主要分享前兩個部分——Spark events時間軸視圖和Execution DAG。Spark Streaming統計數字可視化將在下一篇博文中解釋。性能

Spark events時間軸視圖 優化

從Spark 初期版本至今,Spark events一直是面向用戶API的一部分。在最新的1.4版本,Spark UI將會把這些events在一個時間軸中顯示,讓用戶能夠一眼區別相對和交叉順序。.net

時間軸視圖能夠覆蓋3個等級:全部Job,指定的某個Job,以及指定的某個stage。在下圖中,時間軸顯示了橫跨一個應用程序全部做業中的Spark events。調試

這裏的events順序相對簡單,在全部 executors 註冊後,在應用程序並行運行的4個job中,有一個失敗,其他成功。當全部工做完成,並在應用程序退出後,executors一樣被移除。下面不妨點擊關注其中的一個job:orm

該job在3個文件中作word count,最後join並輸出結果。從時間軸上看,很明顯, 3個 word count stages 並行運行,由於它們不互相依賴。同時,最後一個階段須要依賴前3個文件word count的結果,因此相應階段一直等到全部先行階段完成後纔開始。下面着眼單個stage:圖片

這個stage被切分爲20個partitions,分別在4臺主機上完成(圖片並無徹底顯示)。每段表明了這個階段的一個單一任務。從這個時間軸來看,咱們能夠獲得這個stage上的幾點信息。

首先,partitions在機器中的分佈狀態比較樂觀。其次,大部分的任務執行時間分配在原始的計算上,而不是網絡或I/ O開銷。這並不奇怪,由於傳輸的數據不多。最後,咱們能夠經過給executors分配更多的核心來提高並行度;從目前來看,每一個executors能夠 同時執行不超過兩個任務。

藉此機會展現一下Spark經過該時間軸得到的另外一個特性——動態分配。該特性容許Spark基於工做負載來動態地衡量executors 的數量,從而讓集羣資源更有效地共享。不妨看向下張圖表:

首先要注意的是,這個應用程序是在工做的過程當中得到executors ,而不是預先分配好。在第一個job結束後,用於該job的executors將閒置並返回到集羣。所以在這個期間,同集羣中運行的其餘應用程序能夠得到 這些資源,從而增長集羣資源利用率。只有當一個新的job執行時,Spark應用程序纔會獲取一組新的executors 來運行它。

在一個時間軸中查看Spark events的能力有助於肯定應用程序瓶頸,從而在調試過程當中進行更有針對性的優化。

Execution DAG

在新版本的Spark中,第二個可視化聚焦DAG執行的每一個做業。在Spark中,job與被組織在DAG中的一組RDD依賴性密切相關,相似下圖:

這個job執行一個簡單的word cout。首先,它執行一個textFile從HDFS中讀取輸入文件,而後進行一個flatMap操做把每一行分割成word,接下來進行一個map操 做,以造成form(word,1)對,最後進行一個reduceByKey操做總結每一個word的數值。

可視化的藍色陰影框對應到Spark操做,即用戶調用的代碼。每一個框中的點表明對應操做下建立的RDDs。操做自己由每一個流入的stages劃分。

經過可視化咱們能夠發現不少有價值的地方。首先,根據顯示咱們能夠看出Spark對流水線操做的優化——它們不會被分割。尤爲是,從HDF S讀取輸入分區後,每一個executor隨後即對相同任務上的partion作flatMap和map,從而避免與下一個stage產生關聯。

其次,RDDs在第一個stage中會進行緩存(用綠色突出表示),從而避免對HDFS(磁盤)相關讀取工做。在這裏,經過緩存和最小化文件讀取能夠得到更高的性能。

DAG可視化的價值在複雜jobs中體現的尤其明顯。好比下圖中的ALS計算,它會涉及到大量的map、join、groupByKey操做。

值得注意的是,在ALS中,緩存準確性將對性能產生的影響很是大,由於該算法在每次迭代中會重度使用以前步驟產生的結果。現在經過DAG可視化,用戶和開發人員能夠一目瞭然地查明RDDS是否被恰當地緩存,若是沒有,能夠快速理理解實現緩慢的緣由。

與時間軸視圖同樣,DAG可視化容許用戶點擊進入一個stage進行更詳細地觀察。下圖描述了ALS中一個獨立的stage。

在stage視圖中,屬於這個數據分析stage的全部RDDS細節被自動展開。當前,用戶能夠快速地找到具體的RDDS信息,而沒必要job頁面經過懸停各個點來猜想和檢查。

最後,在這裏突出一下DAG可視化和 SparkSQL之間的一個初步的集成。對比更接近物理實體層面的Spark操做,Spark SQL用戶顯然更熟悉一些高級操做,所以一些高級操做更須要被可視化。其結果相似將一個SQL查詢計劃映射到底層執行的DAG。

與SparkStreaming的整合在Spark 1.4版本中一樣有所實現。

在不久的未來,Spark UI能夠更理解一些更高級別的函數庫語義,以提供更多相關細節。 同時,Spark SQL將與Spark Streaming同樣得到相似的標籤。而在Spark Core中,當用戶查看RDD時,相似partitions數量、調用點、緩存率都將會被可視化。

相關文章
相關標籤/搜索