歡迎轉載,轉載請注明出處,徽滬一郎。
概要
本來源碼編譯沒有什么可說的,對於java項目來說,只要會點maven或ant的簡單命令,依葫蘆畫瓢,一下子就ok了。但到了Spark上面,事情似乎不這么簡單,按照spark officical document上的來做,總會出現這樣或那樣的編譯錯誤,讓人懊惱不已。
今天閑來無事,又重試了一把,居然o了,做個記錄,以備后用。
准備
我的編譯機器上安裝的Linux是archlinux,並安裝后如下軟件
- scala 2.11
- maven
- git
下載源碼
第一步當然是將github上的源碼下載下來
git clone https://github.com/apache/spark.git
源碼編譯
不是直接用maven也不是直接用sbt,而是使用spark中自帶的編譯腳本make-distribution.sh
export SCALA_HOME=/usr/share/scala
cd $SPARK_HOME
./make-distribution.sh
如果一切順利,會在$SPARK_HOME/assembly/target/scala-2.10目錄下生成目標文件,比如
assembly/target/scala-2.10/spark-assembly-1.0.0-SNAPSHOT-hadoop1.0.4.jar
使用sbt編譯
之前使用sbt編譯一直會失敗的主要原因就在於有些jar文件因為GFW的原因而訪問不了。解決之道當然是添加代理才行。
代理的添加有下面幾種方式,具體哪種好用,一一嘗試吧,對於最新的spark。使用如下指令即可。
export http_proxy=http://proxy-server:port
方法二,設置JAVA_OPTS
JAVA_OPTS="-Dhttp.proxyServer=proxy-server -Dhttp.proxyPort=portNumber"
運行測試用例
既然能夠順利的編譯出jar文件,那么肯定也改動兩行代碼來試試效果,如果知道自己的發動生效沒有呢,運行測試用例是最好的辦法了。
假設已經修改了$SPARK_HOME/core下的某些源碼,重新編譯的話,使用如下指令
export SCALA_HOME=/usr/share/scala
mvn package -DskipTests
假設當前在$SPARK_HOME/core目錄下,想要運行一下RandomSamplerSuite這個測試用例集合,使用以下指令即可。
export SPARK_LOCAL_IP=127.0.0.1
export SPARK_MASTER_IP=127.0.0.1
mvn -Dsuites=org.apache.spark.util.random.RandomSamplerSuite test