本人最近由于实验需要,需要对Spark源码进行研读,折腾许久,记录下Spark源码编译、导入 IntelliJ IDEA和顺利运行Spark中自带example的过程。Spark版本是最新的2.3.0版本。
1.Spark源码获取
Spark的源码获取可以从官网或者是github上获取,由于接下来我们需要对源码进行编译(不借助 IntelliJ IDEA),所以我们直接下载源码压缩包。Github上Spark的下载地址:点击打开链接.
2.Maven安装
对源码的编译我们采用Maven方式,这里的编译方式完全参照官网文档,官方文档中有个很有趣的现象:他要求使用maven3.3.9或更高版本,然后要求对maven是使用内存进行设置以免报错,然后说了一大堆,又强调即使没有这些设置,脚本也会自动完成对maven的下载和相关设置,也就是说我们啥也不安装不设置,一下载源码就可以进行编译,因为脚本会自动帮助我们完成一切工作。
但是,为了能够使Spark源码顺利导入IDEA,我们最好安装最新版本Maven,并且将IDEA中maven版本设置成我们安装的版本(自带版本一般没有达到3.3.9版本)。
1. 下载Maven安装包,获得apache-maven-3.5.3-bin.tar.gz 包。
2.将apache-maven-3.5.3-bin.tar.gz 包解压到home目录下,然后在~/.bashrc 文件下添加路径(weixun是博主的用户名):
可以选择性的添加一下MAVEN_OPTS,这个不添加也可以,这个标准是参照官网的编译方式添加的。export MAVEN_HOME=/home/weixun/apache-maven-3.5.3 export CLASSPATH=$CLASSPATH:$MAVEN_HOME/lib export PATH=$PATH:$MAVEN_HOME/bin
export MAVEN_OPTS="-Xmx2g -XX:ReservedCodeCacheSize=512m"
3. 在终端输入source ~/.bashrc使路径生效
4.在终端输入mvn -v查看是否安装安装成功,如图
![]()
5.修改Maven本地仓库的位置,在Maven的安装目录下,/home/weixun/apache-maven-3.5.3/conf/目录下找到settings.xml,将本地仓库路径修改为/home/weixun/.m2/repository,这个路径是待会编译Spark源码时下载依赖的默认路径,也是IDEA中Maven下载依赖的默认路径,为了避免出问题,我们将他们都设置为一个路径。
6.在IDEA上修改Maven版本,File/Setting/Build,Execution,Deployment/Build Tools/Maven, 如下图,默认的本地仓库路径也就是Local repository就不用修改了。
7.安装和修改完成以后,就可以开始编译Spark源码了。
3. Spark源码编译
编译方式参照官方文档,如图
打开终端,进入Spark源码解压目录,然后输入如下命令
./build/mvn -DskipTests clean package
等待一段时间,根据自身网速,就可以完成编译,编译成功的话就会出现这种效果。
可以测试一下Spark,输入,就可以看到“Spark”字样
./bin/spark-shell
4.将Spark源码导入 IntelliJ IDEA
File/Open/ 选中被编译过的Spark源码目录下的pom.xml,开始导入IDEA,等待一段时间以后,在IDEA界面就会看到pom.xml报错,这种被标红的部分分两种情况。
第一,就是没有像第二步那样对IDEA中Maven版本进行更改,导致有些以来没有下载下来(编译时有些没有下全,可能会碰到这种问题,我导入是就发现checkstyle 8.2没有下载),这时修改Maven版本就会下载这些依赖。
第二,就是需要人为设置路径的一些参数,如下图,这些我尝试没有填写,在接下来运行Spark中例子时没有任何影响(主要是有些参数我不知道是啥意思,不好填写)
![]()
5.运行Spark源码中的程序
在IDEA中导入Spark工程以后,找到/examples/src/main/scala,点击里面的例子进行运行,由于是单机运行,需要添加参数:
VM options: -Dspark.master=local
这时运行是会报错,如下:
从错误中可以推断是Scala依赖没有建立(因为都是缺Scala最基本的包),这时只要添加Scala依赖就行,这里要注意,Spark版本中Scala依赖是有版本限制的,我们干脆用它编译过程中自动下载的Scala版本,通过如下方式添加Scala依赖:File -> Project Structure -> Modules -> spark-examples_2.11 -> Dependencies添加依赖 jars -> {spark dir}/spark/assembly/target/scala-2.11/jars/,再运行时就不报错了。
6.参考
1. 官方文档
2. https://github.com/linbojin/spark-notes/blob/master/ide-setup.md(只要是参照这位大牛的github,大家可以看一下)