一、写在前面
为什么要阅读源码?这个问题对于热爱、学习、使用技术的程序er的重要性不言而喻:不懂原理只会使用就是重复劳动的码农,技术长进不大,以后也会碰到职业天花板。所以我们就开始吧!
环境如下:
- JVM:JDK 1.8.0_144
- Scala:2.12.10
- Spark:spark-3.0.0-preview
- IDE:IntelliJ IDEA 2017.2.3
二、搭建步骤
1.下载源码并解压
下载地址: http://spark.apache.org/downloads.html
目前(2019年12月23日)尚未发布3.0.0正式版,先下载preview版本阅读学习。
2.修改Spark源码下的pom.xml文件
打开Spark源码下的pom.xml文件,修改对应的JDK版本和maven版本
Spark源文件中有多个pom.xml,只需要改根目录下的pom.xml文件就可以了。完成修改后,就能开始编译了。
3.导入源码到IDEA
勾选对应的选项框
添加yarn
和hadoop2.7
选项,其他默认即可。
下一步默认:
点击finished的之后,需要等待比较长时间(我使用了几个小时)的编译过程。
4.下载Maven依赖
工程导入之后,依次点击右侧Maven Project——Generate Sources and Update Folders For All Projects
,点击之后Maven会下载编译需要的源码,需要等待一段时间,长短依赖网络好坏。
5.build工程
问题1:scala-xml问题
1 | Error:(48, 9) To compile XML syntax, the scala.xml package must be on the classpath. |
确保依赖:
1 | <dependency> |
点击Maven Projects——Reimport All Maven Projects
具体可查看: https://github.com/scala/scala-xml 的文档说明及issues
问题2:NoClassDefFoundError
1 | "H:\Program Files\jdk8\bin\java" "-javaagent:..." |
原因: SDK没有找到SCALA的库(lib),导致找不到类
解决方法: 在项目中的SDK中添加SCALA的库(scala-library)
问题3:找不到SparkSession
1 | Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/sql/SparkSession$ |
解决:在Modules中的spark-examples_2.12中的Dependencies中,把所有依赖范围Scope是Provided和Runtime的全部改成Compile,Test的不用修改。
问题4:A master URL must be set in your configuration
点击edit configuration,在左侧点击该项目。在右侧VM options中输入-Dspark.master=local
,作用是指定本程序本地单线程运行,再次运行即可。
之后就可以正常运行Spark的example例子了。