天天看點

Spark源碼閱讀的正确打開方式

Spark發展至今,應該說已經非常成熟了。是大資料計算領域不得不學習的架構。尤其是Spark在穩定性和社群發展的成熟度方面,吊打其他的大資料處理架構。

Spark至今隻經曆過1.x、2.x和3.x三個大版本的變化,在核心實作上,我們在Github能看到的最早的實作是0.5版本,這個版本隻有1萬多行代碼,就把Spark的核心功能實作了。

https://mmbiz.qpic.cn/mmbiz_jpg/UdK9ByfMT2MSKPJAPEuwFF4c51BIibTSLV41740Vutq954fX6Fteiaan8ZlFGYcnT5N9Vs7qlJ6EgnBX4IgYprtw/640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1
Spark源碼閱讀的正确打開方式
當然我們不可能從這麼古老的版本看,假如你接觸過Spark,現在準備看源碼,那麼我建議從2.x版本中選取一個,最好是2.3或者2.4。但是經過如此多的疊代,Spark的代碼量已經暴增了幾倍。是以你需要抓住重點,本文就是想跟大家說說,我們該怎麼看,看哪些東西。

基礎概念篇

首先假如你是第一次接觸Spark,那麼你需要對Spark的設計思想有所了解,知道Spark用了哪些抽象,Spark在提出RDD的時候是基于什麼樣的考慮。

在這裡給大家推薦幾篇論文如下:

第一篇:

這個不多說,直接給出一個連結,這篇文章不長,很快能看完。

彈性分布式資料集:一種為記憶體化叢集計算設計的容錯抽象:

https://fasionchan.com/blog/2017/10/19/yi-wen-tan-xing-fen-bu-shi-shu-ju-ji-yi-zhong-wei-nei-cun-hua-ji-qun-ji-suan-she-ji-de-rong-cuo-mo-xing/

第二篇:

大型叢集上的快速和通用資料處理架構

這篇論文長達170多頁,當然我們沒有必要看完,我在網上找到一個總結,我們在《彈性分布式資料集:一種為記憶體化叢集計算設計的容錯抽象》這篇論文基礎上看起來也會輕松不少。

連結如下:

https://blog.csdn.net/weixin_44024821/article/details/89948115

環境準備

Spark的源碼環境搭建網上有很多資源,主要是環境依賴比如JDK、Scala、Maven等,整個過程大概耗時要1-4個小時,主要是編譯源碼費時。大家可以在網上任意找一篇文章搭建起來環境就可以。 直到你在編譯時出現下圖就大功告成了。(個人不建議使用sbt的方式編譯,推薦Maven)

https://mmbiz.qpic.cn/mmbiz_jpg/UdK9ByfMT2MSKPJAPEuwFF4c51BIibTSLvX4kgyJe4iboNydKuCN2kWpIIH6ibebzeiau8pfmibQUC3f3ebslwf3W5w/640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1
Spark源碼閱讀的正确打開方式

Spark核心設計篇

https://mmbiz.qpic.cn/mmbiz_png/UdK9ByfMT2MSKPJAPEuwFF4c51BIibTSLshuQSPsOJW1rC7icLgKSPLq7ficCAgzxc8L9qhHKLS9Z6nqTfia9WtThQ/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1
Spark源碼閱讀的正确打開方式

上圖是一個最簡單的Spark任務的執行圖。

在核心設計篇,我們最重要的子產品清單如下:

Spark的初始化

SparkContext SparkEnv SparkConf RpcEnv SparkStatusTracker SecurityManager SparkUI MetricsSystem TaskScheduler

Spark的存儲體系

SerializerManager BroadcastManager ShuffleManager MemoryManager NettyBlockTransferService BlockManagerMaster BlockManager CacheManager

Spark的記憶體管理

MemoryManager MemoryPool ExecutionMemoryPool StorageMemoryPool MemoryStore UnifiedMemoryManager

Spark的運算體系

LiveListenerBus MapOutputTracker DAGScheduler TaskScheduler ExecutorAllocationManager OutputCommitCoordinator ContextClearner

Spark的部署模式

LocalSparkCluster Standalone Mater/Executor/Worker的容錯

Spark Streaming

StreamingContext Receiver Dstream 視窗操作

Spark SQL

Catalog TreeNode 詞法解析器Parser RuleExecutor Analyzer與Optimizer HiveSQL相關

其他

假如你對圖計算Spark GraphX和機器學習Spark MLlib感興趣,可以單獨看看。

整個跟實時計算相關的包和類大部分都已經包含在上述目錄中了。假如你在使用的過程中出現了問題,就需要針對其中的具體部門去看。

源碼閱讀是我們每一個開發者都需要經曆的階段,閱讀源碼的好處就不說了。你我都懂。

關注我的公衆号,背景回複【JAVAPDF】擷取200頁面試題!

5萬人關注的大資料成神之路,不來了解一下嗎? 5萬人關注的大資料成神之路,真的不來了解一下嗎? 5萬人關注的大資料成神之路,确定真的不來了解一下嗎?
歡迎您關注 《大資料成神之路》