Windows下從源代碼構建Spark

綜述

其實Spark的構建已經做得很好了,但是由于大家已知的原因,很多東西不能很順利的拿到。估計你要給老外說花了很多時間在build Spark上面,他只有一個反應“unbelievable”。

在這里特別要感謝一下OSChina,它的Maven庫的存在,使得在國內從源代碼構建Spark成為可能。

沒想到OS China 關閉了了,但是Ali又站了出來。為阿里點個贊!

如果碰到什么問題的話,是這篇文章沒有覆蓋到的話,請大家給我簡信或者留言。我會盡自己所能給大家解決。

下面開始言歸正傳。

1,所需軟件

下面的軟件安裝完成之后,都確保路徑添加到系統環境變量PATH里面去了。

檢查方法:設置好之后,啟動windows cmd, 敲入命令,看看能不能找到。
Scala: scala -version
SBT: sbt -version
Maven: mvn -version
Git: git --version

  • Scala
    最新的版本是2.11.7,我下載的是2.10.6. Spark 最新的穩定版1.5.2使用的是Scala 2.10

  • Java
    本文中使用的是Java SE 7u 79,也就是大家“1.7”。

  • SBT
    Spark 用Maven和SBT都可以編譯。個人建議:在IDE里面,還是使用SBT比較好。

  • Maven
    SBT可以重用Maven的依賴庫。我們使用Maven,可以方便地從OSChina下載Spark需要的相關依賴。
    在Maven的安裝目錄之下,conf文件下面有個settings.xml文件,備份一下這個文件,然后對著下面進行修改。修改的主要目的是添加OSChina的鏡像進來。
    <mirrors>
    <mirror>
    <id>nexus-osc</id>
    <mirrorOf>central</mirrorOf>
    <name>Nexus osc</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    </mirror>
    </mirrors>

  • Git
    Git可以用來下載Spark源代碼,在用SBT或者Maven編譯的過程中,也需要Git去從Github下載一些依賴的東西。

  • Intellij IDEA
    一般簡稱為IDEA,本文中使用的是最新的15.0.1。作為一個商業軟件,它很有良心的推出了完全免費的Community Edition版本,完全可以滿足我們的需求。

關于IDE的選擇,一開始我使用的Scala-IDE,占用內存太多。設置了兩個斷點就慢的不行,基本沒有辦法單步調試。
嘗試IDEA之后,毫不猶豫地拋棄了Scala-IDE.
IDEA優點如下:

  • 界面更精簡
  • 運行期間占用內存小
  • 切換到SBT之后,編譯速度快。
  • 支持更好。畢竟是商業軟件,一般問題都可以從官方的網站,論壇里面找到解決方案。

本文中使用的具體版本:

  C:\Users\spark>scala -version
   Scala code runner version 2.10.6 -- Copyright 2002-2013, LAMP/EPFL

  C:\Users\spark>java -version
  java version "1.7.0_79"
  Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
  Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

  C:\Users\spark>sbt -version
  [info] Set current project to km (in build file:/C:/Work/Code/ACE/3.0/km/)
  [warn] The `-` command is deprecated in favor of `onFailure` and will be removed in 0.14.0

  C:\Users\spark>mvn -version
  Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T19:57:37+08:00)
  Maven home: C:\Program Files\apache-maven-3.3.3\bin\..
  Java version: 1.7.0_79, vendor: Oracle Corporation
  Java home: C:\Program Files\Java\jdk1.7.0_79\jre
  Default locale: en_US, platform encoding: GBK
  OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"

  C:\Users\spark>git --version
  git version 2.6.3.windows.1

2,配置步驟

2.1 使用git下載源代碼

# Master development branch
git clone git://github.com/apache/spark.git

# 1.5 maintenance branch with stability fixes on top of Spark 1.5.2(本文中使用的)
git clone git://github.com/apache/spark.git -b branch-1.5

2.2 利用Maven 編譯Spark 源代碼

步驟如下:

C:\Users\spark>set MAVEN_OPTS=-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m
C:\Users\spark>mvn -DskipTests clean package

編譯中需要下載很多東西,耐心等候。成功之后:

 [INFO] Spark Project Parent POM ........................... SUCCESS [ 29.999 s]
 [INFO] Spark Project Test Tags ............................ SUCCESS [ 19.688 s]
 [INFO] Spark Project Launcher ............................. SUCCESS [ 29.203 s]
 [INFO] Spark Project Networking ........................... SUCCESS [ 22.105 s]
 [INFO] Spark Project Shuffle Streaming Service ............ SUCCESS [ 13.525 s]
 [INFO] Spark Project Unsafe ............................... SUCCESS [ 37.206 s]
 [INFO] Spark Project Core ................................. SUCCESS [07:42 min]
 [INFO] Spark Project Bagel ................................ SUCCESS [ 18.502 s]
 [INFO] Spark Project GraphX ............................... SUCCESS [01:20 min]
 [INFO] Spark Project Streaming ............................ SUCCESS [02:38 min]
 [INFO] Spark Project Catalyst ............................. SUCCESS [04:11 min]
 [INFO] Spark Project SQL .................................. SUCCESS [04:59 min]
 [INFO] Spark Project ML Library ........................... SUCCESS [04:58 min]
 [INFO] Spark Project Tools ................................ SUCCESS [ 16.661 s]
 [INFO] Spark Project Hive ................................. SUCCESS [05:56 min]
 [INFO] Spark Project REPL ................................. SUCCESS [ 56.534 s]
 [INFO] Spark Project Assembly ............................. SUCCESS [02:35 min]
 [INFO] Spark Project External Twitter ..................... SUCCESS [ 34.803 s]
 [INFO] Spark Project External Flume Sink .................. SUCCESS [ 27.097 s]
 [INFO] Spark Project External Flume ....................... SUCCESS [ 40.341 s]
 [INFO] Spark Project External Flume Assembly .............. SUCCESS [  5.210 s]
 [INFO] Spark Project External MQTT ........................ SUCCESS [01:00 min]
 [INFO] Spark Project External MQTT Assembly ............... SUCCESS [ 29.437 s]
 [INFO] Spark Project External ZeroMQ ...................... SUCCESS [01:06 min]
 [INFO] Spark Project External Kafka ....................... SUCCESS [01:03 min]
 [INFO] Spark Project Examples ............................. SUCCESS [04:33 min]
 [INFO] Spark Project External Kafka Assembly .............. SUCCESS [ 11.513 s]
 [INFO] ------------------------------------------------------------------------
 [INFO] BUILD SUCCESS
 [INFO] ------------------------------------------------------------------------
 [INFO] Total time: 48:43 min
 [INFO] Finished at: 2015-11-18T14:04:25+08:00
 [INFO] Final Memory: 395M/1591M
 [INFO] ------------------------------------------------------------------------

2.3 安裝和配置IDEA

安裝好IDEA之后,還需要下面這些步驟。

a 安裝Scala插件。

File-->Settings-->Plugins-->Install JetBrains plugin

  • 搜索scala,選擇Download and Install.
  • 安裝完成之后,重啟IDEA。

b 配置SBT

File-->Build,Execution,Deployment-->Build Tools-->SBT

  • JVM-->Custom
    選擇你自己的Java 安裝目錄
  • Launcher(sbt-launch.jar)-->Custom
    選擇你自己的sbt-launch.jar

c 配置Maven

File-->Build,Execution,Deployment-->Build Tools-->Maven

  • 修改Maven home directory, 設置成你的安裝目錄
  • 修改User settings file,設置成你的安裝目錄下面conf中settings.xml

File-->Build,Execution,Deployment-->Build Tools-->Maven-->Runner

  • VM Options 加入如下參數

    -Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m
    
  • JRE
    設置成自己想要的Java版本

d 配置Scala

File-->Settings-->Build,Execution,Deployment-->Compiler-->Scala Compiler

  • Incrementality type
    設置成SBT.

File-->Settings-->Languages & Frameworks-->Scala Compile Server

  • 選中 Use external compile server for scala
  • JVM SDK 設置成自己需要的。

2.4 在IDEA編譯源代碼

a 導入代碼

File-->New-->Project From Existing Source-->選擇你自己的Spark目錄-->Import project from external model-->Maven ,然后一路Next,耐心等待一切完成。

b 編譯源代碼

Build-->Make Project 或者* Ctrl + F9*

c Compilation completed successfully

開始你的Spark之旅吧!

2.5 可能遇到的問題

  • not found: type SparkFlumeProtocol

View-->Tool Windows-->Maven Projects-->Reimport All Maven Projects-->Spark Project External Flume Sink-->LifeCycle-->Install-->右鍵Maven build
或者
View-->Tool Windows-->Maven Projects-->Reimport All Maven Projects-->Spark Project External Flume Sink-->右鍵 Generate Sources and Update Folders

原因:EventBatch.java,SparkFlumeProtocol.java 和 SparkSinkEvent.java是由maven的avro 插件在build過程中間生成的。

  • 如果那個Module出現java.lang.NoClassDefFoundError

Project Structure-->Modules-->對應的Module-->Dependencies-->Scope, 從provided 改為compile

  • Error:scalac:

View-->Tool Windows-->Maven Projects-->Reimport All Maven Projects-->選中出問題的模塊-->Lifecycle-->clean-->右鍵Run Maven Build
然后Ctrl + F9

  • error java invalid source release 1.8 in intellij

問題出在Java8 Tests 這個模塊,主要用來測試Java8的。如果你用的是java 1.8,應該不會碰到這個問題。
1.7的話,很簡單,直接忽略掉這個Project就可以了。
View-->Tool Windows-->Maven Projects-->Reimport All Maven Projects-->Spark Project Java8 Tests POM-->右鍵Ignore projects

3,參考

感謝下面的這些作者的創作和分享,他們的文章給了我很多的幫助。自己寫過一篇之后,才知道寫文章是一件多么不容易的事情。正因為如此,他們的無私奉獻才更顯珍貴。
Build Spark-1.4.1 on Linux with Scala 2.10.5
spark-1.4.1源碼Intellij IDEA編譯錯誤TestSQLContext.scala assertion failed
Windows 下搭建 Spark 源代碼閱讀環境
【Spark十五】Intellj Idea搭建Spark源代碼開發環境
Spark 源碼和應用開發環境的構建
Spark Build Spark
IntelliJ IDEA 15.0 Help
import Spark source code into intellj, build Error: not found: type SparkFlumeProtocol and EventBatch
IntelliJ Runtime error

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

推薦閱讀更多精彩內容