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

  • 2020 年 2 月 10 日
  • 筆記

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

Spark至今只經歷過1.x、2.x和3.x三個大版本的變化,在核心實現上,我們在Github能看到的最早的實現是0.5版本,這個版本只有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)

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感興趣,可以單獨看看。

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

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

Tags: