了解Spark源碼的概況
本文旨在幫助那些想要對Spark有更深入了解的工程師們,了解Spark源碼的概況,搭建Spark源碼閱讀環境,編譯、調試Spark源碼,為將來更深入地學習打下基礎。
一、項目結構
在大型項目中,往往涉及非常多的功能模塊,此時借助於Maven進行項目、子項目(模塊)的管理,能夠節省很多開發和溝通成本。整個Spark項目就是一個大的Maven項目,包含著多個子項目。無論是Spark父項目還是子項目,本身都可以作為獨立的Maven項目來管理。core是Spark最為核心的功能模塊,提供了RPC框架、度量系統、Spark UI、存儲體系、調度系統、計算引擎、部署模式等功能的核心實現。這些Spark中主要子項目(模塊)的功能如下:
- spark-catalyst:Spark的詞法、語法分析、抽象語法樹(AST)生成、優化器、生成邏輯執行計劃、生成物理執行計劃等。
- spark-core:Spark最為基礎和核心的功能模塊。
- spark-examples:使用多種語言,為Spark學習人員提供的應用例子。
- spark-sql:Spark基於SQL標準,實現的通用查詢引擎。
- spark-hive:Spark基於Spark SQL,對Hive元數據、數據的支持。
- spark-mesos:Spark對Mesos的支持模塊。
- spark-mllib:Spark的機器學習模塊。
- spark-streaming:Spark對流式計算的支持模塊。
- spark-unsafe:Spark對系統內存直接操作,以提升性能的模塊。
- spark-yarn:Spark對Yarn的支持模塊。
二、閱讀環境準備
準備Spark閱讀環境,就需要一臺好機器。筆者調試源碼的機器的內存是8GB。源碼閱讀的前提是首先在IDE環境中打包、編譯通過。常用的IDE有 IntelliJ IDEA和Eclipse,筆者選擇用Eclipse編譯和閱讀Spark源碼,原因有二:一是由於使用多年對它比較熟悉,二是社區中使用Eclipse編譯Spark的資料太少,在這裏可以做個補充。筆者在Mac OS系統編譯Spark源碼,除了安裝JDK和Scala外,還需要安裝以下工具。
1.安裝SBT
由於Scala使用SBT作為構建工具,所以需要下載SBT。下載地址: http://www.scala-sbt.org/,下載最新的安裝包sbt-0.13.12.tgz並安裝。
移動到選好的安裝目錄,例如:
mv sbt-0.13.12.tgz~/install/
進入安裝目錄,執行以下命令:
chmod 755 sbt-0.13.12.tgz
tar -xzvf sbt-0.13.12.tgz
配置環境:
cd ~
vim .bash_profile
添加如下配置:
export SBT_HOME=$HOME/install/sbt
export PATH=$SBT_HOME/bin:$PATH
輸入以下命令使環境變量快速生效:
source .bash_profile
安裝完畢後,使用sbt about命令查看,確認安裝正常,如圖1所示。
圖1 查看sbt安裝是否正常
2.安裝Git
由於Spark源碼使用Git作為版本控制工具,所以需要下載Git的客戶端工具。下載地址:https://git-scm.com,下載最新的版本並安裝。
安裝完畢後可使用git –version命令來查看安裝是否正常,如圖2所示。
圖2 查看git是否安裝成功
3.安裝Eclipse Scala IDE插件
Eclipse通過強大的插件方式支持各種IDE工具的集成,要在Eclipse中編譯、調試、運行Scala程序,就需要安裝Eclipse Scala IDE插件。下載地址:http://scala-ide.org/download/current.html。
由於筆者本地的Eclipse版本是Eclipse Mars.2 Release (4.5.2),所以選擇安裝插件http://download.scala-ide.org/sdk/lithium/e44/scala211/stable/site,如圖3:
圖3 EclipseScala IDE插件安裝地址
在Eclipse中選擇“Help”菜單,然後選擇www.feifanyule.cn/ “www.qinlinyule.cn www.120xh.cn Install New www.089188.cn Software…”選項,打開Install對話框,如圖4所示:
圖4 安裝Scala IDE插件
點擊“Add…”按鈕,打開“Add Repository”對話框,輸入插件地址,如5圖所示:
圖5 添加Scala IDE插件地址
全選插件的內容,完成安裝,如圖6所示:
圖6 安裝Scala IDE插件
三、Spark源碼編譯與調試
1.下載Spark源碼
首先,訪問Spark官網http://spark.apache.org/,如圖7所示。
圖7 Spark官網
點擊“Download Spark”按鈕,在下一個頁面找到Git地址,如圖8所示。
圖8 Spark官方Git地址
筆者在當前用戶目錄下創建Source文件夾作為放置Spark源碼的地方,進入此文件夾並輸入git clonegit://github.com/apache/spark.git命令將源碼下載到本地,如9圖所示。
圖9下載Spark源碼
2.構建Scala應用
進到Spark根目錄,執行sbt命令。會下載和解析很多jar包,要等很長的時間,筆者大概花費了一個多小時,才執行完,如圖10所示。
圖10 構建Scala應用
從圖10可以看出,sbt構建完畢時會出現提示符>。
3.使用sbt生成eclipse工程文件
在sbt命令出現提示符>後,輸入eclipse命令,開始生成eclipse工程文件,也需要花費很長的時間,筆者本地大致花費了40分鐘。完成時的狀況,如圖11所示。
圖11 sbt編譯過程
現在我們查看Spark下的子文件夾,發現其中都生成了.project和.classpath文件。比如mllib項目下就生成了.project和.classpath文件,如圖12所示。
圖12 sbt生成的項目文件
4. 編譯Spark源碼
由於Spark使用Maven作為項目管理工具,所以需要將Spark項目作為Maven項目導入到Eclipse中,如13圖所示:
圖13 導入Maven項目
點擊Next按鈕進入下一個對話框,如圖14所示:
圖14 選擇Maven項目
全選所有項目,點擊finish按鈕。這樣就完成了導入,如圖15所示:
圖15 導入完成的項目
導入完成後,需要設置每個子項目的build path。右鍵單擊每個項目,選擇“Build Path”→“Configure BuildPath…”,打開Build Path對話框,如圖16:
圖16 Java構建路徑
Eclipse在對項目編譯時,可能會出現很多錯誤,只要仔細分析報錯原因就能一一排除。所有錯誤解決後運行mvn clean install,如圖17所示:
圖17 編譯成功
5.調試Spark源碼
以Spark源碼自帶的JavaWordCount為例,介紹如何調試Spark源碼。右鍵單擊JavaWordCount.java,選擇“Debug As”→“Java Application”即可。如果想修改配置參數,右鍵單擊JavaWordCount.java,選擇“Debug As”→“DebugConfigurations…”,從打開的對話框中選擇JavaWordCount,在右側標簽可以修改Java執行參數、JRE、classpath、環境變量等配置,如圖18所示:
圖18 源碼調試
讀者也可以在Spark源碼中設置斷點,進行跟蹤調試。
關於《Spark內核設計的藝術 架構設計與實現》
了解Spark源碼的概況