windos下spark2.3.2源碼編譯

當(dāng)時在學(xué)習(xí)spark的時候,編譯過spark2.11源碼,當(dāng)時也遇到過不少坑,導(dǎo)致編譯過程坎坷。時過境遷,目前spark的最新版本是spark2.3.2。這次跟著官網(wǎng)指導(dǎo)編譯一下最新代碼。


前期注意事項

  • 本人系統(tǒng)環(huán)境是windows10,IDE 為idea2017
  • 本次編譯是通過Maven編譯,Maven版本為3.3.9,不用SBT編譯
  • 自Spark 2.2.0起,對Java 7的支持已被刪除!
  • 給Maven多配置一點內(nèi)存,防止編譯期間OOM異常,官網(wǎng)推薦

export MAVEN_OPTS="-Xmx2g -XX:ReservedCodeCacheSize=512m"

ReservedCodeCacheSize設(shè)置是可選的,但建議都加上否則可能出現(xiàn)警告或者異常。

[INFO] Compiling 203 Scala sources and 9 Java sources to /Users/me/Development/spark/core/target/scala-2.11/classes...
[ERROR] Java heap space -> [Help 1]

建議修改maven的安裝目錄下的conf/settings.xml文件中添加如下配置,以達(dá)到j(luò)ar下載加速的效果

 <!-- 阿里云中央倉庫 -->
 <mirrors>
     <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>
    </mirror>
  </mirrors>

構(gòu)建

去官網(wǎng)下載源碼包

http://spark.apache.org/downloads.html

執(zhí)行命令

./build/mvn -DskipTests clean package

spark編譯要在 bash環(huán)境下進(jìn)行 如git的bash環(huán)境,否則可能報錯

開始編譯 ,運行效果如下圖:



此期間別急。機(jī)器不好的,網(wǎng)不好的,稍安勿躁,阿彌陀佛,等就對了。



37分鐘后編譯全部模塊完成。

IntelliJ運行編譯后的代碼

  • 打開IntelliJ idea open 編譯過后的源代碼,等待加載indexing,不要選import sbt project
  • 找到org.apache.spark.examples中的一個example添加本地方法,測試運行。


    image.png

官網(wǎng)中的提示:

  • “Rebuild Project” 第一次編譯項目的時候可能失敗,點擊這個按鈕“Generate Sources and Update Folders For All Projects”


  • 有一些模塊路徑是idea識別不了的,需要手工選一下,在“Project Settings” 然后選中 “Modules” 模塊。
    • spark-hive: add v0.13.1/src/main/scala
    • spark-streaming-flume-sink: add target\scala2.11\src_managed\main\compiled_avro
    • spark-catalyst: add target\scala-2.11\src_managed\main
      比如idea執(zhí)行報錯,無法找到SparkFlumeProtocol類,進(jìn)入view=>tool window=>maven project中找到Spark Project External Flume Sink模塊,右鍵選擇Generate Sources and update Folders,并在lifecycle中compile改模塊。


  • 執(zhí)行測試類的時候出現(xiàn)Exception in thread "main" java.lang.NoClassDefFoundError: 錯誤
    解決方法:
    Menu -> File -> Project Structure -> Modules -> spark-examples_2.11 -> Dependencies 添加依賴 jars -> {spark dir}/spark/assembly/target/scala-2.11/jars/
  • 如果還碰到哪個模塊導(dǎo)致找不到類在idea中選中單個maven模塊重新mvn clean compile一下

其他編譯命令

mvn 還可以加-P參數(shù)指定hadoop版本,指定構(gòu)建Hive 、JDBC 、Mesos 、Kubernetes 、Kafka、Flume 的支持版本

./build/mvn -Pyarn -Phadoop-2.7 -Dhadoop.version=2.7.3 -DskipTests clean package
./build/mvn -Pyarn -Phive -Phive-thriftserver -DskipTests clean package
./build/mvn -Pmesos -DskipTests clean package
./build/mvn -Pkubernetes -DskipTests clean package
./build/mvn -Pkafka-0-8 -DskipTests clean package
./build/mvn -Pflume -DskipTests clean package

指定單一模塊進(jìn)行構(gòu)建

如果修改了一個模塊的源代碼,想構(gòu)建后跑起來的話,可以用-pl命令構(gòu)建單個模塊,節(jié)省大量時間。

./build/mvn -pl :spark-streaming_2.11 clean install

官網(wǎng)還推薦用make-distribution.sh腳本繼續(xù)打包編譯

./dev/make-distribution.sh --name custom-spark --pip --r --tgz -Psparkr -Phadoop-2.7 -Phive -Phive-thriftserver -Pmesos -Pyarn -Pkubernetes

***bash環(huán)境下運行上面命令,這個腳本和mvn本質(zhì)一樣,但會幫助我們自動設(shè)置maven參數(shù)和jvm參數(shù),如腳本中就有這段代碼export MAVEN_OPTS="${MAVEN_OPTS:--Xmx2g -XX:ReservedCodeCacheSize=512m}"


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容