目前 Spark 編譯指令碼已經將Maven 整合進來了,以方便編譯以及部署。這個指令碼將會在它本地 build/ 編譯目錄自動下載和安裝所有編譯過程中所必需的( Maven,Scala 和 Zinc )。可以手動修改dev/make-distribution.sh指令碼,使其選擇自己安裝好的Maven,如果不修改這個指令碼會自動安裝所需要的編譯環境。確保編譯的機器能正常訪問外網,建議在測試環境編譯,生產上對網路做各種限制,即便開通了代理也還會報各種詭異在錯誤。

參考官方文件:http://spark.apache.org/docs/latest/building-spark.html

一、 Spark-2.1.0 編譯環境準備

1、 安裝並配置好Maven(本次編譯使用apache maven 3.5.0)

2、 安裝並配置JDK(本次編譯使用jdk1.8.0_77)

3、 安裝並配置Scala(本次使用scala-2.11.8)

下載spark原始碼 spark-2.1.0.tgz-->http://spark.apache.org/downloads.html

二、編譯過程

1、編譯:mvn -Pyarn -Dhadoop.version=2.6.0-cdh5.7.0 -Phive -Phive-thriftserver -DskipTests clean package

(1)在/home/hadoop/spark-2.1.0/pom.xml檔案新增編譯所需的cloudera軟體包依賴

<repository>
  <id>cloudera-repo</id>
  <name>Cloudera Repository</name>
  <url>https://repository.cloudera.com/artifactory/cloudera-repos</url>
  <releases>
    <enabled>true</enabled>
  </releases>
  <snapshots>
    <enabled>false</enabled>
  </snapshots>
</repository>
 
<profile>
  <id>cdh5.7.0</id>
  <properties>
    <hadoop.version>2.6.0-cdh5.7.0</hadoop.version>
    <hbase.version>1.2.4-cdh5.7.0</hbase.version>
    <zookeeper.version>3.4.5-cdh5.7.0</zookeeper.version>
  </properties>
</profile>

(2)  設定MAVENJVM引數,根據實際情況調整:exportMAVEN_OPTS="-Xmx2g -XX:ReservedCodeCacheSize=512m"

(3)開始編譯:mvn -Pyarn -Dhadoop.version=2.6.0-cdh5.7.0 -Phive -Phive-thriftserver -DskipTests clean package



可能報的錯誤1.

[ERROR] Failed to execute goalnet.alchim31.maven:scala-maven-plugin:3.2.2:compile (scala-compile-first) onproject spark-core_2.11: Execution scala-compile-first of goalnet.alchim31.maven:scala-maven-plugin:3.2.2:compile failed. CompileFailed ->[Help 1]

org.apache.maven.lifecycle.LifecycleExecutionException: Failedto execute goal net.alchim31.maven:scala-maven-plugin:3.2.2:compile(scala-compile-first) on project spark-core_2.11: Execution scala-compile-firstof goal net.alchim31.maven:scala-maven-plugin:3.2.2:compile failed.

解決:檢視一下是否還有sbtzinc在執行,有的話kill掉再繼續

可能遇到的錯誤2


解決辦法:檢查pom.xml—> repository配置cloudera-repo的位置是否正確

可能遇到的錯誤3…,在這就不一一列舉了,環境不一樣,錯誤也不一樣

 

到此為止spark原始碼編譯結束!!!

2、生成可執行的軟體包

(1)閱讀make-distribution.sh指令碼,瞭解每一步的執行過程;在dev/make-distribution.sh檔案裡註釋掉"${BUILD_COMMAND[@]}",把MAVEN_HOME改成自己之前安裝的MAVEN,如果不改的話這個指令碼還會去下載再裝一遍,可能很慢也可能出現各種錯,然後開始構建:dev/make-distribution.sh --name hadoop-2.6.0-cdh5.7.0 --tgz -Psparkr-Phadoop-2.6 -Pyarn -Dhadoop.version=hadoop-2.6.0-cdh5.7.0


在build/mvn腳本里可以看到有install_zinc、install_scala、install_mvn


(1)     在dev/make-distribution.sh檔案裡註釋掉"${BUILD_COMMAND[@]}",在make-distribution.sh檔案裡把MAVEN_HOME改成自己之前安裝的MAVEN,如果不改的話這個指令碼還會去下載再裝一遍,可能很慢也可能出現各種錯,然後開始構建:dev/make-distribution.sh --name hadoop-2.6.0-cdh5.7.0 --tgz -Psparkr -Phadoop-2.6 -Pyarn -Dhadoop.version=hadoop-2.6.0-cdh5.7.0

(2)     執行完構建打包完之後會在根目錄下生成spark-2.1.0-bin-hadoop-2.6.0-cdh5.7.0.tgz檔案





到此打包結束!!!


從上圖看出spark-sql執行正常