最近准备动手实践一下spark的源码编译安装,折腾了好久,最后也被折磨了好久,在此记录一下并安抚一下一连几天来郁闷的心情。

先陈述一下背景:

之前,我从spark官方的github网页上下载下来了一个最新的master分支的源码包(不是git clone),版本是1.6.2的zip。

编译之前也各种百度,按照网上资料的步骤一步一步走。经过了漫长蛋疼的等待时间之后,报错了,提示找不到jar依赖,只好又去翻个墙。最后顺利编译成功。
按照前辈们的意思,会在编译后的文件夹下,找到一个类似于 spark-assembly-1.6.x-hadoop2.x.0.jar 这样的一个jar包,可我死活就是在编译后的文件夹(我这里是spark-master(源码根目录)的assembly/target/scala-2.11/jars)下找不到。于是又是一通乱搜,最后连google都没能帮到我,于是又转用sbt,希望能生一个assebmly的jar。

结果成功倒是成功了,也从控制台打印的日志里看到了输出目录,在一个叫 external的文件夹里找到了带 assembly的jar。可是都是这种命名的jar:spark-streaming-kafka-0-8-assembly-2.0.0-SNAPSHOT.jar,试了好多次都是这样,虽然这些jar里边也有比较全的依赖,也能做开发用,但是像我这种有代码纠结症的人怎么能忍!
于是决定从官网下载一个源码再编译试试。下载的界面如下:

Spark Math安卓 spark-assembly-*.jar_Spark Math安卓

下载完成之后解压,进入源码根目录,按照官方的编译教程

http://spark.apache.org/docs/latest/building-spark.html

根据自己具体情况,执行相应的命令即可,当然,前提是你已经安装好了jdk、scala,以及maven,并设置好了环境变量。

还有,在第一次下载下来的时候,没有看到下边的提示:Note。点击那个蓝色字: with Scala 2.11 support(上边的图时候来补的,没想到spark2.0的时候,已经是使用scala2.11进行编译的),再次进入到编译教程文档,里边提到了关于在scala2.11下的一些配置修改:

./dev/change-scala-version.sh 2.11
mvn -Pyarn -Phadoop-2.4 -Dscala-2.11 -DskipTests clean package

按照提示,修改完执行即可,完成之后在target子目录下可以看到合成jar包:

Spark Math安卓 spark-assembly-*.jar_jar_02

解决完纠结了几天的问题之后,不禁感叹,哎,同样是源码编译,差距咋这么大捏!