您的位置:首页 > 其它

使用Maven编译Spark源码

2017-11-24 23:35 555 查看
      本文主要介绍Linux系统下使用Maven编译Spark源码,以及可能会遇到的问题及解决。由于windows下编译的方法类似,只做粗略介绍,详细参考Linux的编译方法。spark源码为1.6.0版本。为什么用Maven不用sbt?因为一年前曾经尝试用过sbt,但是没成功,后来有别的事就把编译源码放下了,最近打算学习学习,由于之前失败的经历,这次使用的是Maven,虽然遇到不少问题,最后还是成功了。

Linux下编译Spark源码

准备:Maven和Spark源码包

1. Maven安装

1.1 首先下载Maven并解压,安装目录视情况而定,我放在了/usr/local目录下

$ wget http://mirrors.cnnic.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz $ tar vxf apache-maven-3.3.9-bin.tar.gz
$ mv apache-maven-3.3.9 /usr/local/maven3


1.2 配置Linux环境变量

$ vim /etc/profile


加入下面两行

export MAVEN_HOME=/usr/local/maven3
export PATH=${PATH}:${MAVEN_HOME}/bin


执行 source /etc/profile,使环境变量生效。

执行
mvn -v
验证maven是否安装成功,如果安装成功会打印相关内容

Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: /usr/local/maven3
Java version: 1.7.0_75, vendor: Oracle Corporation
Java home: /usr/etc/jdk1.7.0_75/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "2.6.32-573.18.1.el6.x86_64", arch: "amd64", family: "unix"
1.3 修改Maven配置

为了编译源码速度更快 ,或者被墙的原因下载不到依赖,可以更改Maven仓库为国内地址。进入/usr/local/maven3文件夹,在conf目录中找到settings.xml 文件,配置mirrors的子节点,添加如下mirror
阿里云Maven镜像:

<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>


2. Spark源码下载及编译

2.1 Github上搜Spark,下载对应版本,我这里下的是1.6.0,连接:<a href=https://github.com/apache/spark>apache/spark</a>



2.2 修改make-distribution.sh 文件

位置在下载的文件夹里

修改MVN="$MAVEN_HOME/bin/mvn"

2.3 修改spark源码的pom.xml文件,将Maven仓库改成阿里云仓库

<name>Maven Repository</name>
<!--<url>https://repo1.maven.org/maven2</url>-->
<url>https://maven.aliyun.com/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>


2.4 编译源码

cd 到spark的目录下

$ set MAVEN_OPTS=-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m

$ mvn -DskipTests clean package

漫长等待,短则20min,长则1~2小时

编译成功



2.5 导入idea

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

找到examples下的sparkpi,运行。不出问题 完美;不成功看下一节

3.报错解决

3.1 控制台报错 Error:scalac:XXXXX

解决办法:View-->ToolWindows-->Maven Projects-->Reimport All Maven Projects-->选中出问题的模块-->Lifecycle-->clean-->右键Run MavenBuild

然后Ctrl + F9

解释:可能是进行了重复编译,具体原因不太清楚,

3.2 报错 java.lang.NoClassDefFoundError[3][5][6][7]

解决办法:在ProjectStructure-->Modules-->对应的Module-->Dependencies-->Scope, 从provided 改为compile。但是这样一个一个改实在太蠢了,可以直接修改spark-examples_2.11.iml,将里面的scope="PROVIDED"全都替换成空就可以了。如果改了不成功可能是对应的Module选错了,可以多弄几个相关的,看是否解决问题

解释:如果你的jar包/依赖代码 在编译的时候需要依赖,在运行的时候也需要,那么就用compile。如果你的jar包/依赖代码 仅在编译的时候需要,但是在运行时不需要依赖,就用providedCompile

这两个是我在编译过程中遇到的问题,如果遇到其他问题可以查看参看文章[3]。

Windows下编译Spark源码

方法和Linux下类似,Maven安装方法网上查找,其他步骤相同,就是将Linux的terminal改为windows的cmd。

参考文章

[1]     https://www.cnblogs.com/changwei0708/p/5820952.html
[2]     https://www.2cto.com/net/201703/608767.html
[3]     http://www.jianshu.com/p/6ad9dc90b7a5
[4]      http://blog.csdn.net/sdujava2011/article/details/50587170
[5]     https://stackoverflow.com/questions/33885339/noclassdeffounderror-scala-collection-seq
[6]     https://stackoverflow.com/questions/14417814/why-do-i-get-java-lang-noclassdeffounderror-when-i-trying-to-run-this-code
[7]     https://www.2cto.com/kf/201702/597500.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spark maven 源码