自己编译spark是修改spark源码的必备条件,修改的源码自定义打包生效后才能发布到生产环境中。
现在详细介绍使用maven编译Spark-1.6.0的过程
1、下载Spark-1.6.0的源码
http://spark.apache.org/downloads.html
解压源码
cd /opt/spark-1.6.0.tgz
tar -xzvf spark-1.6.0.tgz
官网一般推荐使用sbt, sbt比较适合于编译scala的工程,maven一般适合于java的工程。但是,sbt的源经常访问不到。
maven的源基本国内都能访问。
1)下载地址:http://maven.apache.org/download.cgi
2)解压安装包
tar -xzvf apache-maven-3.3.9-bin.tar.gz
3)设置环境变量,根据自己安装的路径来配置
vim /etc/profile
在文件最后一行增加以下内容:
export MAVEN_HOME=/opt/apache-maven-3.3.9
export PATH=$PATH:$MAVEN_HOME/bin
export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"
4)使配置文件生效:source /etc/profile
5)验证maven是否安装成功: mvn -v
出现下述信息,表示安装成功
3、编译Spark-1.6.0
1)编译前,修改源码的一些地方
/** Print a welcome message */
override def printWelcome() {
import org.apache.spark.SPARK_VERSION
echo("""Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version %s
/_/
""".format(SPARK_VERSION))
修改的地方:
vim /opt/spark-1.6.0-mvn/core/src/main/scala/org/apache/spark/deploy/SparkSubmit.scala
Line:100
vim /opt/spark-1.6.0-mvn/repl/scala-2.10/src/main/scala/org/apache/spark/repl/SparkILoopInit.scala
Line:27
vim /opt/spark-1.6.0-mvn/repl/scala-2.11/src/main/scala/org/apache/spark/repl/SparkILoop.scala
把这三个路径下的启动scala文件的提示修改了,上述的 version %s 改成 version %s complied by wl 20161216
2)maven编译spark源码
cd /opt/spark-1.6.0-mvn/
mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0 -DskipTests clean package
由于spark是基于HDFS的,而不同版本的HDFS协议是不兼容的,所以要指定Hadoop的版本,这里选择的是2.4.0版本。
编译过程会出现一些错误,可以修改/opt/spark-1.6.0-mvn/pom.xml
在插件plugins部分增加以下内容:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-remote-resources-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<goals>
<goal>bundle</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.test.MainClassName</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase> <!-- packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
3)经过maven编译好的spark源码,通过环境配置,即可使用。
环境变量配置: vim /etc/profile
在文件最后一行添加内容:export SPARK_HOME=/opt/spark-1.6.0-mvn/
让配置文件生效:source /etc/profile
运行spark
cd /opt/spark-1.6.0-mvn/bin
./spark-shell
生成的版本位于 /opt/spark-1.6.0/assembly/target/scala-2.10目录下:
spark-assembly-1.6.0-hadoop2.4.0.jar
4)但是由于其比较大,因此部署比较困难,所以可以通过打包,将spark源码打包部署。
进入源码目录,执行打包命令
cd /opt/spark-1.6.0-mvn
./make-distribution.sh --tgz -Phadoop-2.4 -Pyarn -DskipTests -Dhadoop.version=2.4.0 -Phive -Phive-thriftserver
基于hadoop2.4的打包编译,并增加了hive的支持,然后就是漫长的等待。