欢迎转载,转载请注明出处,徽沪一郎。
概要
本来源码编译没有什么可说的,对于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