spark源碼閱讀——搭建和源碼工程師一樣的開發環境

 

閱讀好的開源項目是最好的學習code的方法,在一個大型項目中會涉及到軟件工程的方方面面。

項目代碼作爲最終的落地物質,其中必然會留下很多頂尖工程師、架構師、設計團隊思考的痕跡;

如果從這個層面去看一個開源項目,其實至少包括三個方面:

1)這個項目是如何架構的,會用到哪些關鍵技術

2)實現這些設計是怎麼落到code層面,利用了哪些技巧

3)利用了哪些好的庫和管理的工具方法理念

學習一個開源項目可以從代碼歷史變更維度去追溯,項目是如何一步一步從雛形演進過來,有利於更深入去理解設計者的思路

從架構層面看開源項目:

1)包括哪些組件

2)利用了哪些外部庫

3)搭建了哪些架子把組建創構起來

4)有哪些流程線讓這個軟件可以動起來

以上是最近閱讀學習spark源碼的一些思路總結;理解這個項目是爲了解決什麼問題,它是通過什麼樣解決思路去解決這個問題

當你認識清楚這個問題,知道它的難點在哪;站在解決問題的第一視角時思考該如何解決,結合你的直覺方案去思考,

去認識提出自己的解決方案和思路,然後看現成的解決方案,看別人的解決思路;刨根究底的結合源碼看他們是怎麼把想法

轉成code,怎麼去管理這個複雜項目工程時候,你會發現問題很難很複雜,但是你是可以去構着它的。

spark是爲了解決數據量的計算問題,數據量大所以需要多機處理分而治之

1)多機之間如何進行數據消息傳遞——通過netty實現私有通訊協議

2)機器要能統一調度管理分配資源——clusterMaster集羣管理、work資源上報、Application資源申請、excutor物理資源申請

3)具體計算怎麼實現——內存分配管理、RDD各種操作、ShuffleStage、ResultMap、DAGSchedule構建、Taskchedule構建

4)兼容多種部署方式——deploy

5)這麼多任務異常怎麼處理、怎麼監控——Metric、webUI、sparklistenBus

6)速度優化——kvStore、鎢存儲

7)更上層的應用支持——sparkSQL、Mlib、Stream、graphx、sparkPython、sparkR

這些都是靜態的模塊,具體的動線流程是如何,一定得要結合代碼跑起來纔可以更好去了解,所以我們需要去搭建spark開發工程師一樣的開發環境。可以在和他們一樣的環境下去開發改動這些代碼,驗證和測試我們的推測猜想。

spark是基於github做代碼持續上線管理,通過mvn和sbt做項目依賴管理;應該是迭代開發持續上線模式,所以有很多的測試例子。我們讀代碼的思路:

1)看書、blog看前人是怎麼講的,方面我們對spark實現思路有個全局認識

2)結合別人源碼註釋按動線標註閱讀代碼,在心裏有spark工作機理

3)結合代碼的Test例子去解讀每一模塊是如何實現,活該如何用,推測當時實現思路

4)把某個代碼模塊拿出來,寫自己的應用例子

5)在spark項目裏面優化或者新增某些功能,然後重新編譯上線,測試spark是否能夠執行我們個性化定製功能

接下來就講講我們怎麼去搭建和spark源碼開發工程師一樣的開發環境

A.下載源碼:git clone https://github.com/apache/spark.git -b branch-2.4

B.編譯源碼:

./build/mvn -DskipTests clean package

C.打開IntelljIdea:File——openproject——mvn

D.等待依賴下載完,項目代碼無報錯標誌

E.開始測試每個模塊下的Test
F.可以把assembly/target/scala-2.11/jars裏面編譯好的jar包拿出來放到新工程中測試每個jar中 實現的功能,看你是否瞭解

G.在源碼中新增功能或者優化功能,重新編譯spark,部署到線上看新功能是否能夠執行

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章