一、下載源碼包
1. 下載地址有官網和github:
http://spark.apache.org/downloads.html
https://github.com/apache/spark
Linux服務器上直接下載:wget https://archive.apache.org/dist/spark/spark-2.4.0/spark-2.4.0.tgz
2. 解壓源碼
二、解壓環境
需要maven、jdk、git、scala、hadoop環境,並配置環境變量。
二、使用Maven編譯Spark
先找到解壓后的spark文件里的pom.xml把maven、jdk、scala、hadoop改成當前安裝的版本。如圖:

maven庫的地址建議換成阿里的地址:http://maven.aliyun.com/nexus/content/groups/public
在編譯過程需要保證編譯機器的是聯網的,以保證Maven從網上下載其依賴包。另外,編譯前需要設置JVM內存大小,否則在編譯過程中,會由於默認內存小而出現內存溢出的錯誤。編譯執行腳本如下,其中,參數-P表示激活依賴的程序及版本,-Dskip Tests表示編譯時跳過測試環節。
1、設置maven內存的環境變量
MAVEN_OPTS=-Xmx2g -XX:MaxPermSize=2048M -XX:ReservedCodeCacheSize=2048M
2、右擊spark-2.4.0文件夾,選擇Git Bash here,彈出git窗口,輸入以下命令:
./build/mvn -Pyarn -Phadoop-2.8.4 -Dhadoop.version=2.8.4 -DskipTests clean package
整個編譯過程編譯了約29個任務,每個版本的數量不同。如果是已經下載依賴包的情況,則編譯耗時1分鍾左右。由於編譯過程中需要下載較多的依賴包,因此整個編譯時間取決於網速,最終編譯完成后的文件夾大約為899MB。整個編譯可能會很長,要耐心等待。
最終成功結果如下圖:

如果在編譯過程中出現了錯誤,解決后再重新執行編譯命令:
錯誤1:Failed to collect dependencies at org.jpmml:pmml-model:jar:1.2.15
Could not resolve dependencies for project org.apache.spark:spark-core_2.11:jar:2.4.0
這兩種都是依賴包下載失敗,為了避免重新跑腳本還會失敗浪費時間,建議使用idea加載jar包,或者到maven官網手動下載好放到maven本地庫里。
錯誤2:有時第二次編譯時,會刪除源碼包里面target里面的文件失敗,可以手動刪除,或者重新解壓個新的spark源碼文件,再編譯。
