使用Maven编译Spark源码
2017-11-24 23:35
555 查看
本文主要介绍Linux系统下使用Maven编译Spark源码,以及可能会遇到的问题及解决。由于windows下编译的方法类似,只做粗略介绍,详细参考Linux的编译方法。spark源码为1.6.0版本。为什么用Maven不用sbt?因为一年前曾经尝试用过sbt,但是没成功,后来有别的事就把编译源码放下了,最近打算学习学习,由于之前失败的经历,这次使用的是Maven,虽然遇到不少问题,最后还是成功了。
1.2 配置Linux环境变量
加入下面两行
执行 source /etc/profile,使环境变量生效。
执行
为了编译源码速度更快 ,或者被墙的原因下载不到依赖,可以更改Maven仓库为国内地址。进入/usr/local/maven3文件夹,在conf目录中找到settings.xml 文件,配置mirrors的子节点,添加如下mirror
阿里云Maven镜像:
2.2 修改make-distribution.sh 文件
位置在下载的文件夹里
修改MVN="$MAVEN_HOME/bin/mvn"
2.3 修改spark源码的pom.xml文件,将Maven仓库改成阿里云仓库
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
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编译Spark源码(windows)
- 使用Maven编译Spark源码
- linux下编译Hive 源码并导入eclipse中(使用maven)
- 使用Spark内嵌的Maven编译Spark
- 使用Maven 编译 storm 源码可能碰到下载依赖jar 的问题
- 使用Maven将Hadoop2.2.0源码编译成Eclipse项目
- 使用阿里云的Maven仓库加速Spark编译过程
- mac下利用IDEA工具Maven编译Spark源码
- [Spark--基础]--maven编译spark源码(spark-2.3.0)
- 使用Maven将Hadoop2.2.0源码编译成Eclipse项目
- Maven编译Spark源码总结
- idea 查看 spark 源码 ,并用 maven 编译
- 使用Maven将Hadoop2.2.0源码编译成Eclipse项目
- Spark1.6.0使用apache-maven-3.3.9编译详细记录
- 使用Maven编译源码
- Spark 学习(三) maven 编译spark 源码
- intellij idea 导入maven编译好的spark源码
- 使用maven编译struts2源码变成Eclipse项目