源码编译前的准备工作
-
安装jdk:(安装前需要卸载Linux自带的OpenJdk)
-
下载jdk并解压到相应安装目录(如:/usr/install/jdk1.8)
-
修改/etc/profile文件,用vim编辑器打开/etc/profile文件,并在文件末尾追加以下内容:
export JAVA_HOME=/usr/install/jdk1.8
export PATH=$PATH:$JAVA_HOME/bin
-
执行source /etc/profile命令或者重启机器,使修改生效
-
验证JDK是否安装成功(终端中执行:java -version命令)
-
-
安装scala(安装过程与JDK安装类似,不同的地方在于修改/etc/profile文件)
export SCALA_HOME=/usr/install/scala2.11
export PATH=$PATH:$SCALA_HOME/bin
-
安装maven工具(安装过程与JDK安装类似,不同的地方在于修改/etc/profile文件)
export M2_HOME=/usr/install/scala2.11
export PATH=$PATH:$M2_HOME/bin
-
安装git(本文只是简单使用git的命令克隆代码,并未将git作为代码仓库使用,因此没有进行配置用户、邮箱等操作)
yum –y install git
-
下载源码包
git clone -b v2.3.0 https://github.com/apache/spark.git
注意:其中-b表示分支,v2.3.0表示版本号,如果下载最新版本源码只需要执行
git clone https://github.com/apache/spark.git即可。
源码编译
-
maven方式编译
-
设置maven参数,避免maven内存不足OOM,导致编译失败
export MAVEN_OPTS="-Xmx2g -XX:ReservedCodeCacheSize=512m"
(Windows系统: set MAVEN_OPTS="-Xmx2g -XX:ReservedCodeCacheSize=512m")
-
执行编译命令:mvn -T 4 -DskipTests clean package
-
-
make-distribution方式编译
maven方式只能对源码进行简单编译,如果需要编译可以部署到服务器上的Spark安装包,则需要使用Spark官方提供的编译脚本make-distribution.sh进行编译,该文件位于dev目录下。在编译之前需要做如下准备工作:
-
更正脚本错误
找到“tar czf "spark-$VERSION-bin-$NAME.tgz" -C "$SPARK_HOME" "$TARDIR_NAME"”,将其修改为
tar -czf "spark-$VERSION-bin-$NAME.tgz" -C "$SPARK_HOME" "$TARDIR_NAME"
-
修改make-distribution.sh文件
找到如下图中所示代码块,并将其注释,接着在注释后边添加如下内容:
添加内容:
VERSION=2.3.0#Spark源码版本号
SCALA_VERSION=2.11#编译使用的scala版本号
SPARK_HADOOP_VERSION=2.7.3#hadoop版本
SPARK_HIVE=1#支持hive,0表示不支持hive
-
修改pom.xml文件
-
修改<useZincServer>true</useZincServer>为<useZincServer>false</useZincServer>,该选项是为了加速编译的,取消加速,避免不必要的出错。
-
修改<failOnViolation>true</failOnViolation>为<failOnViolation>false</failOnViolation>,该选项是对scala代码进行格式检查,源码中存在不符合scala标准的代码,为了避免格式检查不通过造成编译失败,需取消该项检查。
-
添加依赖项:
<dependency>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.2.0</version>
</dependency>
-
-
执行编译命令,在编译过程中,需要从maven仓库下载相关依赖包,因此需要保持网络畅通,为了加快依赖下载速度,可以在安装maven的过程中设置阿里巴巴仓库为maven远程仓库。一次编译失败,可以尝试多次编译。
./dev/make-distribution.sh --name custom-spark --pip --r --tgz -Psparkr -Phadoop-2.7 -Phive -Phive-thriftserver -Pmesos -Pyarn -Pkubernetes
-