1. 程式人生 > >了解Spark源碼的概況

了解Spark源碼的概況

ftw XP 介紹 3.1 onf bug SQ 項目管理工具 nis

本文旨在幫助那些想要對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源碼的概況