• 沒有找到結果。

Profiling System

第三章 研究方法與成果

3.1 Profiling System

Profiling System 是一種用於分析應用程式之行為與工作特性之工具,

為了瞭解各種不同的應用程式在使用 Spark 執行過程中的結構,本篇論文 在 Spark 中自行開發 Profiling System 來記錄下各種不同應用程式內部的執 行結構並且繪製出 RDD 的 DAG 圖,透過 Profiling System 所得到的參數 如 RDD 之間的相依性、Task 之間的 I/O 傳輸量或記憶體使用量等等,搭 配如關鍵路徑演算法、bin-packing 演算法、0/1 Knapsack 演算法等等排程 演算法來排程出較佳的 Task 執行順序,再創建出最適合該應用程式的 virtual cluster,最後使用此 virtual cluster 來執行由 IMS 演算法排程出來擁 有較好運算能力的機器序列,不但能縮短執行時間,還能提升 throughput。

在 2013 年已有能在 spark 平台上繪製出 RDD DAG 圖的程式,名為 Spark Replay Debugger[4],但是限定安裝在 Spark 0.8.0 之前的版本,若安 裝 0.8.0 版本之後的 spark 將無法順利執行,故本篇論文為了要在 spark1.0.2 版本上獲得應用程式內部結構,參考 Spark Replay Debugger 的程式架構後,

自行在 Spark1.0.2 版本上面實作完成,透過收集 Spark 內部的參數後,傳

29

到 GraphViz 繪製成 DAG 圖,Graph Visualization Software(GraphViz)[28]

是一個由 AT&T 實驗室開發的 open source 工具包,使用於繪製 dot 語言指 令碼描述的圖形,其授權為 Eclipse Public License。GraphViz 由 dot 語言的 圖形描述語言以及產生或處理 dot 檔案的工具組成,架構包含 dot、neato、

twopi、circo、fdp、dotty、lefty。

圖 3-1 排程機制整體架構圖

30

本篇論文自行開發的 Profiling System 使用時機是在第一次啟動 Spark 執行應用程式的時候先記錄下如:RDD 的相依性、Stage 的分層以及 Partition 的大小等等資訊,第一次執行結束後將這些資訊部分轉化為 DAG 圖,並產生 png 和 dot 檔,將其儲存在 Spark 資料夾中,藉此讓使用者了 解應用程式的內部運行結構,有助於提供條件來進行即時串流處理的排程 工作,例如取得 RDD 之間的相依性或 Task 之間的記憶體使用量、I/O 存 取量,再透過關鍵路徑演算法、bin-packing 演算法或 0/1 Knapsack 演算法 等等排程演算法來排程出較佳的 Task 執行順序,再藉此 Task 順序創建出 一個最適合應用程式執行的 Virtual Cluster,最後傳到由 IMS 演算法排程出 來擁有較好運算能力且較低 communication time 的序列去執行,就能夠大 幅度提升 Spark 的效能。因為即時串流處理是很長久且持續不斷的,所以 優先執行一次 Profiling System 來了解應用程式內部結構,使得排程機制有 更多參數進行排程優化是不影響 stream processing 的。整體的提升效能的 排程機制將分為三部分,如圖 3-1 所示,本篇論文實作第一部分 Profiling System 和第三部分 In-Memory Scheduler 排程演算法,第二部分則為目前 Spark 預設的創建機制。

為了繪製出 RDD 的 DAG 圖,本篇論文擷取 Spark 內部各個不同階層 的部分參數,Spark 的階層關係如圖 3-2 所示,最上方為 Application 階層,

依序往下為 Job、Stage、Task、RDD 階層,例如:在 Job 階層抓取 finalStage、

在 Stage 階層抓取 stage id 和 stage parent、在 Task 階層抓取 tasks、在 RDD 階層抓取各個 rdd 的 id 和 rdd 的 dependencies…等如表 3-1 所示,藉由這些 參數來繪製各種不同應用程式的 RDD DAG 圖。

31

圖 3-2 Spark 階層圖

表 3-1 繪製 DAG 圖之所需參數

階層名稱 參數

Job 階層 job.finalStage

Stage 階層 stage.id, stage.parent, stage.rdd Task 階層 tasks, taskEndReasons RDD 階層 rdd. dependencies, rdd type,

rdd.id, rdd 程式碼位置

32

本篇論文執行三種不同應用程式來進行效能評估,分別為 WordCount、

K-means 以及 PageRank,故繪製出此三種應用程式的 RDD DAG 圖。RDD DAG 圖的繪製由 dot 檔的內容所描述,其描述內容畫面如圖 3-3 所示。圖 3-4 為經過修改的 WordCount,經由執行 profiling system 後所繪製出來的 DAG 圖,運算結構為輸入 2 個文字檔,計算字數後再將結果 join 起來,

紅色線代表 shuffle dependency,其餘依賴關係用黑色線表示,大框框表示 為 stage 且右下角顯示 stage 的 id,小框框則表示為 RDD,#號後為 rdd 的 id 以及 rdd 的類型,下方文字為 rdd 轉換指令以及所執行應用程式的程式 碼行數。圖 3-5 為 SparkKMeans 的 RDD DAG 圖,圖 3-6 為 SparkPageRank 的 RDD DAG 圖,經由這些 RDD DAG 圖可了解各種不同應用程式之運算 結果,可提供資訊協助資訊開發人員進行排程優化。

圖 3-3 經修改過的 WordCount 之 dot 檔

33

圖 3-4 經修改的 WordCount 之 DAG 圖

圖 3-5 SparkKMeans RDD 之 DAG 圖

34

圖 3-6 SparkPageRank RDD 之 DAG 圖

35

相關文件