Apache Spark源码走读之9 -- Spark源码编译

时间:2022-10-09 19:54:21

欢迎转载,转载请注明出处,徽沪一郎。

概要

本来源码编译没有什么可说的,对于java项目来说,只要会点maven或ant的简单命令,依葫芦画瓢,一下子就ok了。但到了Spark上面,事情似乎不这么简单,按照spark officical document上的来做,总会出现这样或那样的编译错误,让人懊恼不已。

今天闲来无事,又重试了一把,居然o了,做个记录,以备后用。

准备

我的编译机器上安装的Linux是archlinux,并安装后如下软件

  1. scala 2.11
  2. maven
  3. 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