为了利用IDE工具调试Spark源码,分别在macOS上搭建了Spark1.60源码调试环境,在windows下搭建了Spark2.20调试环境。利用IDE编译Spark会出现一些通识性问题,下面将针对这些问题的解决方法做详细描述(macOS与windows通用)
直接利用IDEA
导入Spark
工程,Import Project
中选择Import project from external model
中的Maven
。
一路next
到选择sdk
时配置好JDK
即可
先安装scala plugin
,在设置中的插件管理器中安装scala
插件:
安装完成后,就需要配置对应版本的Scala SDK
了。这一步非常关键,如果配置出现了偏差,会导致一堆的错误。比如对于Spark1.6.0
版本,其项目名称为spark-parent_2.10
则需要配置scala 2.10
版本的编译器。(Spark2.20
对应着Scala2.11
) 具体的版本可以去参考官方文档。
配置方法如下:选择File -> Project Structure
中的Global Libraries
,点击+
号,选择正确的scala
版本,如果没有的话点击Download
下载。
点击ok
后选择添加到全部的modules
在设置里面记得点上Rebuild
时clear project
第一次编译直接选择build project
即可。这时候会出现第一个问题:
Spark官方文档中这么说:
“Rebuild Project” can fail the first time the project is compiled, because generate source files are not automatically generated. Try clicking the “Generate Sources and Update Folders For All Projects” button in the “Maven Projects” tool window to manually generate these sources.”
在IDEA中进行如下操作:View->Tool Windows-> Maven Projects
右边会有Maven Projects
的目录栏,选择出问题的Flume Sink
,右键菜单选择Generate Sources and Update Folders
开始Rebuild
,1.60版本将直接编译成功:
而对于2.20
版本可能会出现以下问题:
spark\sql\hive-thriftserver\src\main\java\org\apache\hive\service\cli\thrift\ThriftCLIService.java
Error:(52, 75) not found: value TCLIService
public abstract class ThriftCLIService extends AbstractService implements TCLIService.Iface, Runnable {………..
针对这种情况,只用在spark\sql\hive-thriftserver\src\gen\java
右键中点Mark Directory as->Sources Root
即可
先配置好要跑的WordCount
,如下图设置,其中设置了本地运行,设置了WordCount
的输入。
这时候会出现如下错误:
这是没找到其依赖库导致的,打开./examples/spark-examples_2.10.iml
,将中间的scope="PROVIDED"
全部删除(观察了一下,默认为compile
,比手动去设置里面调效率高多了)重新Build
即可正确运行。
运行如下:
如果不想用IDE配置各种编译环境,编译Spark就简单多了,编译如下:
经过一段时间的编译:
测试编译是否成功:
https://siliconhalli.org/2017/02/09/spark-build-spark-from-source-on-windo/
https://github.com/linbojin/spark-notes/blob/master/ide-setup.md
http://chant00.com/2017/03/06/sparkSourceCompile/