Apache Spark 設計與實現
討論系統的設計與實現有很多方法,本文選擇 問題驅動 的方式,一開始引入問題,然后分問題逐步深入。從一個典型的 job 例子入手,逐漸討論 job 生成及執行過程中所需要的系統功能支持,然后有選擇地深入討論一些功能模塊的設計原理與實現方式。也許這樣的方式比一開始就分模塊討論更有主線。
本文檔面向的是希望對 Spark 設計與實現機制,以及大數據分布式處理框架深入了解的 Geeks。
因為 Spark 社區很活躍,更新速度很快,本文檔也會盡量保持同步,文檔號的命名與 Spark 版本一致,只是多了一位,最后一位表示文檔的版本號。
由于技術水平、實驗條件、經驗等限制,當前只討論 Spark core standalone 版本中的核心功能,而不是全部功能。誠邀各位小伙伴們加入進來,豐富和完善文檔。
關于學術方面的一些討論可以參閱相關的論文以及 Matei 的博士論文,也可以看看我之前寫的這篇 blog。
好久沒有寫這么完整的文檔了,上次寫還是三年前在學 Ng 的 ML 課程的時候,當年好有激情啊。這次的撰寫花了 20+ days,從暑假寫到現在,大部分時間花在 debug、畫圖和琢磨怎么寫上,希望文檔能對大家和自己都有所幫助。
內容
本文檔首先討論 job 如何生成,然后討論怎么執行,最后討論系統相關的功能特性。具體內容如下:
-
Overview 總體介紹
-
Job logical plan 介紹 job 的邏輯執行圖(數據依賴圖)
-
Job physical plan 介紹 job 的物理執行圖
-
Shuffle details 介紹 shuffle 過程
-
Architecture 介紹系統模塊如何協調完成整個 job 的執行
-
Cache and Checkpoint 介紹 cache 和 checkpoint 功能
-
Broadcast 介紹 broadcast 功能
-
Job Scheduling 尚未撰寫
-
Fault-tolerance 尚未撰寫
可以直接點 md 文件查看。
喜歡看 pdf 版本的可以去 這里 下載。
如果使用 Mac OS X 的話,推薦下載 MacDown 后使用 github 主題去閱讀這些文檔。
示例
寫文檔期間為了 debug 系統,自己設計了一些 examples,放在了 SparkLearning/src/internals 下。