新的可視化幫助更好地了解Spark Streaming應(yīng)用程序
http://www.chinacloud.cn/show.aspx?id=20902&cid=14
通過(guò)可視化來(lái)了解你的Spark應(yīng)用程序-CSDN.NET
http://www.csdn.net/article/2015-07-08/2825162
//
在一個(gè)時(shí)間軸中查看Spark events的能力有助于確定應(yīng)用程序瓶頸,從而在調(diào)試過(guò)程中進(jìn)行更有針對(duì)性的優(yōu)化材部。
//
Execution DAG
通過(guò)可視化我們可以發(fā)現(xiàn)很多有價(jià)值的地方伏蚊。
首先嗦嗡,根據(jù)顯示我們可以看出Spark對(duì)流水線操作的優(yōu)化——它們不會(huì)被分割氛魁。尤其是赐写,從HDF S讀取輸入分區(qū)后恩闻,每個(gè)executor隨后即對(duì)相同任務(wù)上的partion做flatMap和map右蒲,從而避免與下一個(gè)stage產(chǎn)生關(guān)聯(lián)。
其次着裹,RDDs在第一個(gè)stage中會(huì)進(jìn)行緩存(用綠色突出表示)领猾,從而避免對(duì)HDFS(磁盤(pán))相關(guān)讀取工作。在這里骇扇,通過(guò)緩存和最小化文件讀取可以獲得更高的性能摔竿。
DAG可視化的價(jià)值在復(fù)雜jobs中體現(xiàn)的尤為明顯。
摘要:在過(guò)去少孝,Spark UI一直是用戶應(yīng)用程序調(diào)試的幫手继低。而在最新的Spark 1.4版本中,一個(gè)新的因素被注入到Spark UI——數(shù)據(jù)可視化稍走。
【編者按】在"Spark 1.4:SparkR發(fā)布袁翁,鎢絲計(jì)劃鋒芒初露"一文中柴底,我們有簡(jiǎn)單地介紹了1.4版本給Spark注入的新特性,在各個(gè)組件的介紹中也提到了新UI給用戶帶來(lái)的便捷粱胜。而從本文開(kāi)始柄驻,我們將通過(guò)Databricks Blog上的系列文章深入了解新版本中的數(shù)據(jù)可視化,首先分享的是這個(gè)系列的第一篇博文——Understanding your Spark application through visualization焙压,作者 Andrew Or鸿脓。
以下為譯文
圖片最大的價(jià)值就是它可以讓我們發(fā)現(xiàn)未曾預(yù)期的事情——John Tukey。
在過(guò)去涯曲,Spark UI一直是用戶應(yīng)用程序調(diào)試的幫手野哭。而在最新版本的Spark 1.4中,我們很高興地宣布幻件,一個(gè)新的因素被注入到Spark UI——數(shù)據(jù)可視化拨黔。在此版本中,可視化帶來(lái)的提升主要包括三個(gè)部分:
Spark events時(shí)間軸視圖
Execution DAG
Spark Streaming統(tǒng)計(jì)數(shù)字可視化
我們會(huì)通過(guò)一個(gè)系列的兩篇博文來(lái)介紹上述特性傲武,本次則主要分享前兩個(gè)部分——Spark events時(shí)間軸視圖和Execution DAG蓉驹。Spark Streaming統(tǒng)計(jì)數(shù)字可視化將在下一篇博文中解釋。
Spark events時(shí)間軸視圖
從Spark 初期版本至今揪利,Spark events一直是面向用戶API的一部分。在最新的1.4版本狠持,Spark UI將會(huì)把這些events在一個(gè)時(shí)間軸中顯示疟位,讓用戶可以一眼區(qū)別相對(duì)和交叉順序。
時(shí)間軸視圖可以覆蓋3個(gè)等級(jí):所有Job喘垂,指定的某個(gè)Job甜刻,以及指定的某個(gè)stage。在下圖中正勒,時(shí)間軸顯示了橫跨一個(gè)應(yīng)用程序所有作業(yè)中的Spark events得院。
這里的events順序相對(duì)簡(jiǎn)單,在所有 executors 注冊(cè)后章贞,在應(yīng)用程序并行運(yùn)行的4個(gè)job中祥绞,有一個(gè)失敗,其余成功鸭限。當(dāng)所有工作完成蜕径,并在應(yīng)用程序退出后,executors同樣被移除败京。下面不妨點(diǎn)擊關(guān)注其中的一個(gè)job:
該job在3個(gè)文件中做word count兜喻,最后join并輸出結(jié)果。從時(shí)間軸上看赡麦,很明顯朴皆, 3個(gè) word count stages 并行運(yùn)行帕识,因?yàn)樗鼈儾换ハ嘁蕾嚒M瑫r(shí)遂铡,最后一個(gè)階段需要依賴前3個(gè)文件word count的結(jié)果肮疗,所以相應(yīng)階段一直等到所有先行階段完成后才開(kāi)始。下面著眼單個(gè)stage:
這個(gè)stage被切分為20個(gè)partitions忧便,分別在4臺(tái)主機(jī)上完成(圖片并沒(méi)有完全顯示)族吻。每段代表了這個(gè)階段的一個(gè)單一任務(wù)。從這個(gè)時(shí)間軸來(lái)看珠增,我們可以得到這個(gè)stage上的幾點(diǎn)信息超歌。
首先,partitions在機(jī)器中的分布狀態(tài)比較樂(lè)觀蒂教。其次巍举,大部分的任務(wù)執(zhí)行時(shí)間分配在原始的計(jì)算上,而不是網(wǎng)絡(luò)或I/ O開(kāi)銷(xiāo)凝垛。這并不奇怪懊悯,因?yàn)閭鬏數(shù)臄?shù)據(jù)很少。最后梦皮,我們可以通過(guò)給executors分配更多的核心來(lái)提升并行度炭分;從目前來(lái)看,每個(gè)executors可以同時(shí)執(zhí)行不超過(guò)兩個(gè)任務(wù)剑肯。
借此機(jī)會(huì)展示一下Spark通過(guò)該時(shí)間軸獲得的另一個(gè)特性——?jiǎng)討B(tài)分配捧毛。該特性允許Spark基于工作負(fù)載來(lái)動(dòng)態(tài)地衡量executors 的數(shù)量,從而讓集群資源更有效地共享让网。不妨看向下張圖表:
首先要注意的是呀忧,這個(gè)應(yīng)用程序是在工作的過(guò)程中獲得executors ,而不是預(yù)先分配好溃睹。在第一個(gè)job結(jié)束后而账,用于該job的executors將閑置并返回到集群。因此在這個(gè)期間因篇,同集群中運(yùn)行的其他應(yīng)用程序可以獲得這些資源泞辐,從而增加集群資源利用率。只有當(dāng)一個(gè)新的job執(zhí)行時(shí)惜犀,Spark應(yīng)用程序才會(huì)獲取一組新的executors 來(lái)運(yùn)行它铛碑。
在一個(gè)時(shí)間軸中查看Spark events的能力有助于確定應(yīng)用程序瓶頸,從而在調(diào)試過(guò)程中進(jìn)行更有針對(duì)性的優(yōu)化虽界。
Execution DAG
在新版本的Spark中汽烦,第二個(gè)可視化聚焦DAG執(zhí)行的每個(gè)作業(yè)。在Spark中莉御,job與被組織在DAG中的一組RDD依賴性密切相關(guān)撇吞,類(lèi)似下圖:
這個(gè)job執(zhí)行一個(gè)簡(jiǎn)單的word cout俗冻。首先,它執(zhí)行一個(gè)textFile從HDFS中讀取輸入文件牍颈,然后進(jìn)行一個(gè)flatMap操作把每一行分割成word迄薄,接下來(lái)進(jìn)行一個(gè)map操作,以形成form(word煮岁,1)對(duì)讥蔽,最后進(jìn)行一個(gè)reduceByKey操作總結(jié)每個(gè)word的數(shù)值。
可視化的藍(lán)色陰影框?qū)?yīng)到Spark操作画机,即用戶調(diào)用的代碼冶伞。每個(gè)框中的點(diǎn)代表對(duì)應(yīng)操作下創(chuàng)建的RDDs。操作本身由每個(gè)流入的stages劃分步氏。
通過(guò)可視化我們可以發(fā)現(xiàn)很多有價(jià)值的地方响禽。首先,根據(jù)顯示我們可以看出Spark對(duì)流水線操作的優(yōu)化——它們不會(huì)被分割荚醒。尤其是芋类,從HDF S讀取輸入分區(qū)后,每個(gè)executor隨后即對(duì)相同任務(wù)上的partion做flatMap和map界阁,從而避免與下一個(gè)stage產(chǎn)生關(guān)聯(lián)侯繁。
其次,RDDs在第一個(gè)stage中會(huì)進(jìn)行緩存(用綠色突出表示)泡躯,從而避免對(duì)HDFS(磁盤(pán))相關(guān)讀取工作巫击。在這里,通過(guò)緩存和最小化文件讀取可以獲得更高的性能精续。
DAG可視化的價(jià)值在復(fù)雜jobs中體現(xiàn)的尤為明顯。比如下圖中的ALS計(jì)算粹懒,它會(huì)涉及到大量的map重付、join、groupByKey操作凫乖。
值得注意的是确垫,在ALS中,緩存準(zhǔn)確性將對(duì)性能產(chǎn)生的影響非常大帽芽,因?yàn)樵撍惴ㄔ诿看蔚袝?huì)重度使用之前步驟產(chǎn)生的結(jié)果删掀。如今通過(guò)DAG可視化,用戶和開(kāi)發(fā)人員可以一目了然地查明RDDS是否被恰當(dāng)?shù)鼐彺娴冀郑绻麤](méi)有披泪,可以快速理理解實(shí)現(xiàn)緩慢的原因。
與時(shí)間軸視圖一樣搬瑰,DAG可視化允許用戶點(diǎn)擊進(jìn)入一個(gè)stage進(jìn)行更詳細(xì)地觀察款票。下圖描述了ALS中一個(gè)獨(dú)立的stage控硼。
在stage視圖中,屬于這個(gè)stage的所有RDDS細(xì)節(jié)被自動(dòng)展開(kāi)艾少。當(dāng)前卡乾,用戶可以快速地找到具體的RDDS信息,而不必job頁(yè)面通過(guò)懸停各個(gè)點(diǎn)來(lái)猜測(cè)和檢查缚够。
最后幔妨,在這里突出一下DAG可視化和 SparkSQL之間的一個(gè)初步的集成。對(duì)比更接近物理實(shí)體層面的Spark操作谍椅,Spark SQL用戶顯然更熟悉一些高級(jí)操作误堡,因此一些高級(jí)操作更需要被可視化。其結(jié)果類(lèi)似將一個(gè)SQL查詢計(jì)劃映射到底層執(zhí)行的DAG毯辅。
與SparkStreaming的整合在Spark 1.4版本中同樣有所實(shí)現(xiàn)埂伦,這里在下一篇博文中會(huì)詳細(xì)介紹。
在不久的將來(lái)思恐,Spark UI可以更理解一些更高級(jí)別的函數(shù)庫(kù)語(yǔ)義沾谜,以提供更多相關(guān)細(xì)節(jié)。 同時(shí)胀莹,Spark SQL將與Spark Streaming一樣獲得類(lèi)似的標(biāo)簽基跑。而在Spark Core中,當(dāng)用戶查看RDD時(shí)描焰,類(lèi)似partitions數(shù)量媳否、調(diào)用點(diǎn)、緩存率都將會(huì)被可視化荆秦。
在此感謝社區(qū)中所有對(duì)可視化工作有所貢獻(xiàn)的組織和個(gè)人篱竭,更特別感謝NTT Data的@sarutak在時(shí)間軸可視化特性中的主要貢獻(xiàn)。
英文原文:Understanding your Spark application through visualization(翻譯/王輝 責(zé)編/仲浩)