通過可視化來了解你的Spark應用程式

2020-12-05 CSDN技術社區

【編者按】在"Spark 1.4:SparkR發布,鎢絲計劃鋒芒初露"一文中,我們有簡單地介紹了1.4版本給Spark注入的新特性,在各個組件的介紹中也提到了新UI給用戶帶來的便捷。而從本文開始,我們將通過Databricks Blog上的系列文章深入了解新版本中的數據可視化,首先分享的是這個系列的第一篇博文——Understanding your Spark application through visualization,作者 Andrew Or。

以下為譯文

圖片最大的價值就是它可以讓我們發現未曾預期的事情——John Tukey。

在過去,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在一個時間軸中顯示,讓用戶可以一眼區別相對和交叉順序。

時間軸視圖可以覆蓋3個等級:所有Job,指定的某個Job,以及指定的某個stage。在下圖中,時間軸顯示了橫跨一個應用程式所有作業中的Spark events。


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


該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對流水線操作的優化——它們不會被分割。尤其是,從HDFS讀取輸入分區後,每個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數量、調用點、緩存率都將會被可視化。

在此感謝社區中所有對可視化工作有所貢獻的組織和個人,更特別感謝NTT Data的@sarutak在時間軸可視化特性中的主要貢獻。

英文原文:Understanding your Spark application through visualization(翻譯/王輝  責編/仲浩) 


【預告】 首屆中國人工智慧大會(CCAI 2015)將於7月26-27日在北京友誼賓館召開。機器學習與模式識別、大數據的機遇與挑戰、人工智慧與認知科學、智慧機器人四個主題專家雲集。人工智慧產品庫將同步上線,預約諮詢:QQ:1192936057。歡迎關注。 

相關焦點

  • 每個數據科學家都得會一點SparkMagic
    輕鬆訪問Spark應用程式日誌和信息· 針對任何遠程Spark集群自動創建帶有SparkContext和HiveContext的SparkSession· 將Spark查詢的輸出捕獲為本地Pandas數據框架,以輕鬆與其他Python庫進行交互(例如matplotlib)· 發送本地文件或Pandas數據幀到遠程集群
  • Spark運行模式——Local模式
    首先需要下載Spark1.官網地址 http://spark.apache.org/2.文檔查看地址 https://spark.apache.org/docs/2.1.1/3.下載地址 https://archive.apache.org/dist/spark/Local
  • 大數據分析工程師入門9-Spark SQL
    一你該了解的Spark SQL1.什麼是Spark SQL?使用RDD進行編程時,開發人員在採用不同的程式語言和不同的方式開發應用程式時,其應用程式的性能千差萬別,但如果使用DataFrame和Dataset進行開發時,資深開發人員和初級開發人員開發的程序性能差異很小,這是因為SparkSQL 內部使用Catalyst optimizer 對執行計劃做了很好的優化。
  • 手把手教你在本機安裝spark
    spark支持像是java、scala和Python等眾多語言,但是對於spark來說語言不太重要,不同的語言寫出來的spark代碼相差不太大。和之前的文章一樣,我會以Python為主,畢竟Python對初學者比較友好(雖然我自己在工作當中使用的是scala)。今天這篇文章從最基礎的spark安裝開始講起,安裝spark並不需要一個龐大的集群,實際上單機也可以。
  • Spark在360商業數據部的應用實踐
    在與Hive進行集成的同時,Spark SQL也提供了JDBC/ODBC接口,便於第三方工具如Tableau、Qlik等通過該接口接入Spark SQL。由於之前大部分數據分析工作都是通過使用hive命令行完成的,為了將遷移至SparkSQL的代價最小,360系統部的同事開發了SparkSQL的命令行版本spark-hive。
  • SparkCore——專業術語及流程圖
    1,Applicationapplication(應用)其實就是用spark-submit提交的程序。比方說spark examples中的計算pi的SparkPi。一個application通常包含三部分:從數據源(比方說HDFS)取數據形成RDD,通過RDD的transformation和action進行計算,將結果輸出到console或者外部存儲(比方說collect收集輸出到console)。2,DriverSpark中的driver感覺其實和yarn中Application Master的功能相類似。
  • 數據分析工程師面試集錦5——Spark面試指南
    Spark使用最先進的DAG調度程序、查詢優化程序和物理執行引擎,實現批量和流式數據的高性能。2.易用性。Spark支持Java、Python和Scala的API,還支持超過80種高級算法,使用戶可以快速構建多樣的應用。3.通用性。Spark提供了統一的解決方案。
  • 軟體工程師:使用AR構建您的業務應用程式
    增強現實應用程式開發已經開始了對許多行業的討要,同時也證明了付出的努力和成本是值得的。讓我們談談在不同業務部門中高效的AR實現。對於房地產經理來說,AR應用程式是一根魔杖,在向客戶展示房產時派上用場。甚至那些仍在建造中的物體也沒有問題。AR app通過360度的3D可視化,添加交互性,將它們變成一個完整的產品。
  • 高潮過後,你該了解的小程序應用場景
    網際網路從業者該如何對待小程序通過上面的描述,你大概了解到小程序是什麼了,那麼:和現在的WebApp、原生APP有什麼區別?作為不同的網際網路從業者(產品、運營、技術)該怎麼對待小程序?1)獲客成本微信對小程序並不提供如同應用商店一樣的營銷推廣支持,用戶只能通過:線下掃一掃:一來是微信希望小程序的使用場景對接線下,把線下流量都引到微信上。二來是微信不允許第三方來它的生態裡控制流量入口。
  • 數據可視化在移動端的應用
    隨著大數據行業的快速發展,數據可視化設計在移動端的應用越來越多。今天我們就數據可視化在移動端的使用場景、特點、注意事項以及各個使用場景進行一次簡單的分享。應用場景數據可視化在移動端的主要體現是「數據圖表」,我們最常用的數據設計組件就是:柱狀圖、折線圖、環形圖等,它們簡單易懂,容易被用戶接受。
  • 基於Bert和通用句子編碼的Spark-NLP文本分類
    NLP在越來越多的人工智慧應用中是越來越重要。如果你正在構建聊天機器人、搜索專利資料庫、將患者與臨床試驗相匹配、對客戶服務或銷售電話進行分級、從財務報告中提取摘要,你必須從文本中提取準確的信息。文本分類是現代自然語言處理的主要任務之一,它是為句子或文檔指定一個合適的類別的任務。類別取決於所選的數據集,並且可以從主題開始。
  • 停止使用Pandas並開始使用Spark+Scala
    數據轉換   您可以在Pandas DataFrame中應用的大多數(如果不是全部)數據轉換在Spark中可用。 當然,語法上會有差異,有時還有其他需要注意的地方,其中一些我們現在將介紹。  總的來說,我發現Spark與Pandas相比在符號上更一致,並且由於Scala是靜態類型的,因此您通常可以執行myDataset。 等待編譯器告訴您可用的方法!
  • 2020年最受歡迎的雲生態開源應用程式監控工具
    Docker和Kubernetes已經被開發運營人員廣泛了解和熟悉。但是容器雲架構下系統監控確實一個常常被忽略的問題。儘管容器部署主要涉及在每個容器內運行單個應用程式或服務,但是隨著部署規模的擴大,對環境狀態和運行狀況的可見性變得越來越重要,而不僅僅是在作業系統或應用程式級別,而且在容器級別也是如此。雲生態監控和日誌處理領域分為實時資料庫,度量標準收集器,可視化工具,輪詢器,記錄器等。
  • 深入對比數據科學工具箱: SparkR vs Sparklyr
    >                             version = "2.2.0",                             config = sparklyr::spark_config())       以寫Parquet文件為例,同理你可以用 SparkR::write.*()/sparklyr::spark_write
  • GC調優在Spark應用中的實踐
    在實際應用中,我們只能根據應用對性能瓶頸的側重性,來選取合適的垃圾收集器。例如,當我們運行需要有實時響應的場景的應用時,我們一般選用CMS GC,而運行一些離線分析程序時,則選用Parallel GC。那麼對於Spark這種既支持流式計算,又支持傳統的批處理運算的計算框架來說,是否存在一組通用的配置選項呢?
  • 聯想發布新款AR眼鏡,通過與PC、手機相連實現AR、3D可視化、遠程協作
    該眼鏡希望通過虛擬顯示和3D可視化,在各個層面助力員工工作。 硬體配置方面來看,ThinkReality A3智能眼鏡搭載的是高通驍龍XR1晶片,解析度為1080p,無板載電池。 這款眼鏡可通過與電腦、智慧型手機連接實現AR、3D可視化、遠程協作等操作。
  • SparkR編程系列 | 機器學習+數據可視化
    朝樂門@ruc為您詳細講解SparkR的KMeans機器學習和數據可視化的知識,並給出實際程序代碼、代碼介紹及運行結果  —— 一份你的大腦也可以直接執行和調試的SparkR源程序。本案例由朝樂門設計與編寫。
  • 應用BioPython解析和可視化蛋白質的結構
    今日我們以Python語言為基礎,調用BioPython框架/模塊,以2003年SARS冠狀病毒的刺突蛋白(spike protein)為例子來實現蛋白質的解析與可視化。現在很多生物信息學家、基礎和臨床醫學研究者喜歡使用Python來編程,而調用BioPython模塊/框架可以節省很多時間和精力來實現想要的生物信息學算法。今天咱們就使用BioPython模塊來解析和可視化蛋白質分子。
  • 利用Spark 和 scikit-learn 將你的模型訓練加快 100 倍
    它們在與我們的行動應用程式交互時為數百萬用戶做出預測。當我們使用 Spark 進行數據處理時,我們首選的機器學習框架是 scikit-learn。隨著計算機變得越來越便宜,機器學習解決方案的上市時間變得越來越關鍵,我們探索了加快模型訓練的各種方法。其中一個解決方案是將 Spark 和 scikit-learn 中的元素組合到我們自己的混合解決方案中。
  • Spark AR 統整特效發布
    本文轉載自【Facebook開發者】公眾號,無論您想增加下載量、提升用戶留存,還是想讓應用程式變現,Facebook 平臺都有能助您一臂之力的工具和解決方案,歡迎大家關注。