https://github.com/JerryLead/SparkInternals
Spark Internals
Spark Version: 1.0.2
Doc Version: 1.0.2.0
Authors
Weibo Id | Name |
---|---|
@JerryLead | Lijie Xu |
Introduction
本文主要討論 Apache Spark 的設(shè)計與實現(xiàn)商乎,重點(diǎn)關(guān)注其設(shè)計思想央拖、運(yùn)行原理、實現(xiàn)架構(gòu)及性能調(diào)優(yōu),附帶討論與 Hadoop MapReduce 在設(shè)計與實現(xiàn)上的區(qū)別鲜戒。不喜歡將該文檔稱之為“源碼分析”专控,因為本文的主要目的不是去解讀實現(xiàn)代碼,而是盡量有邏輯地,從設(shè)計與實現(xiàn)原理的角度,來理解 job 從產(chǎn)生到執(zhí)行完成的整個過程塞赂,進(jìn)而去理解整個系統(tǒng)于未。
討論系統(tǒng)的設(shè)計與實現(xiàn)有很多方法,本文選擇 問題驅(qū)動 的方式,一開始引入問題,然后分問題逐步深入。從一個典型的 job 例子入手辩越,逐漸討論 job 生成及執(zhí)行過程中所需要的系統(tǒng)功能支持,然后有選擇地深入討論一些功能模塊的設(shè)計原理與實現(xiàn)方式信粮。也許這樣的方式比一開始就分模塊討論更有主線黔攒。
本文檔面向的是希望對 Spark 設(shè)計與實現(xiàn)機(jī)制,以及大數(shù)據(jù)分布式處理框架深入了解的 Geeks强缘。
因為 Spark 社區(qū)很活躍督惰,更新速度很快,本文檔也會盡量保持同步旅掂,文檔號的命名與 Spark 版本一致赏胚,只是多了一位,最后一位表示文檔的版本號商虐。
由于技術(shù)水平觉阅、實驗條件、經(jīng)驗等限制秘车,當(dāng)前只討論 Spark core standalone 版本中的核心功能典勇,而不是全部功能。誠邀各位小伙伴們加入進(jìn)來叮趴,豐富和完善文檔割笙。
關(guān)于學(xué)術(shù)方面的一些討論可以參閱相關(guān)的論文以及 Matei 的博士論文,也可以看看我之前寫的這篇 blog眯亦。
好久沒有寫這么完整的文檔了咳蔚,上次寫還是三年前在學(xué) Ng 的 ML 課程的時候,當(dāng)年好有激情啊搔驼。這次的撰寫花了 20+ days,從暑假寫到現(xiàn)在侈询,大部分時間花在 debug舌涨、畫圖和琢磨怎么寫上,希望文檔能對大家和自己都有所幫助。
Contents
本文檔首先討論 job 如何生成囊嘉,然后討論怎么執(zhí)行温技,最后討論系統(tǒng)相關(guān)的功能特性。具體內(nèi)容如下:
-
Overview 總體介紹
Spark詳解01概覽|Spark部署|執(zhí)行原理 -
Job logical plan 介紹 job 的邏輯執(zhí)行圖(數(shù)據(jù)依賴圖)
Spark詳解02Job 邏輯執(zhí)行圖 -
Job physical plan 介紹 job 的物理執(zhí)行圖
Spark詳解03Job 物理執(zhí)行圖 -
Shuffle details 介紹 shuffle 過程
Spark詳解04Shuffle 過程 -
Architecture 介紹系統(tǒng)模塊如何協(xié)調(diào)完成整個 job 的執(zhí)行
Spark詳解05架構(gòu)Architecture -
Cache and Checkpoint 介紹 cache 和 checkpoint 功能
Spark詳解06容錯機(jī)制Cache 和 Checkpoint -
Broadcast 介紹 broadcast 功能
Spark詳解07廣播變量Broadcast - Job Scheduling 尚未撰寫
- Fault-tolerance 尚未撰寫
可以直接點(diǎn) md 文件查看扭粱。
喜歡看 pdf 版本的可以去 這里 下載舵鳞。
如果使用 Mac OS X 的話,推薦下載 MacDown 后使用 github 主題去閱讀這些文檔琢蛤。
Examples
寫文檔期間為了 debug 系統(tǒng)蜓堕,自己設(shè)計了一些 examples,放在了 SparkLearning/src/internals 下博其。
Acknowledgement
文檔寫作過程中套才,遇到過一些細(xì)節(jié)問題,感謝下列同學(xué)給予的解答慕淡、討論和幫助:
@Andrew-Xia 參與討論了 BlockManager 的實現(xiàn)與 broadcast(rdd) 會出現(xiàn)的情況背伴。
@CrazyJVM 參與討論了 BlockManager 的實現(xiàn)。
@王聯(lián)輝 參與討論了 BlockManager 的實現(xiàn)峰髓。
感謝下列同學(xué)對文檔內(nèi)容的補(bǔ)充:
Weibo Id | 章節(jié) | 補(bǔ)充內(nèi)容 | 修改狀態(tài) |
---|---|---|---|
@OopsOutOfMemory | Overview | workers 與 executors 的關(guān)系及 Spark Executor Driver資源調(diào)度小結(jié) | 由于這部分內(nèi)容的相關(guān)實現(xiàn)還在不斷 update傻寂,本文暫不作結(jié)論性總結(jié),已添加詳情鏈接到該同學(xué)的 blog |
感謝下列同學(xué)指出文檔中的不足或錯誤:
Weibo Id | 章節(jié) | 不足或錯誤 | 修改狀態(tài) |
---|---|---|---|
@Joshuawangzj | Overview | 多個 application 運(yùn)行時 worker 應(yīng)該會啟動多個 Backend 進(jìn)程 | 已修改携兵,但需要進(jìn)一步實驗證實疾掰。怎么控制 Backend 的個數(shù)還不清楚 |
@_cs_cm | Overview | 最新的 groupByKey() 已經(jīng)取消蘊(yùn)含的 mapValues() 操作,沒有MapValuesRDD 產(chǎn)生了 | 已修改 groupByKey() 相關(guān)的 figures 和描述 |
@染染生起 | JobLogicalPlan | FullDepedency 中的 N:N 關(guān)系是否屬于 NarrowDependency | 將原來的兩種 NarrowDependency 描述改為更清楚的三種眉孩,已做更詳細(xì)的說明 |
@zzl0 | 前四章 | 很多 typos个绍,比如 “groupByKey 產(chǎn)生了后面三個 RDD”,應(yīng)該是兩個浪汪。詳見 pull request巴柿。 | 已經(jīng)全部修改 |
@左手牽右手TEL | Cache 和 Broadcast 兩章 | 很多 typos | 已經(jīng)全部修改 |
@cloud-fan | JobLogicalPlan | Cogroup() 圖中的某些剪頭應(yīng)該是紅色的 | 已經(jīng)全部修改 |
@CrazyJvm | Shuffle details | 從 Spark1.1開始spark.shuffle.file.buffer.kb的默認(rèn)值為32k,而不是100k | 已經(jīng)全部修改 |
特別感謝 @明風(fēng)Andy 同學(xué)給予的大力支持死遭。
Special thanks to the rockers (including researchers, developers and users) who participate in the design, implementation and discussion of big data systems.