IDEA导入spark源代码调试

  • 获取源码

官网下载源码到本地后,须要先进行编译,参考官方文档,编译很简单,这里使用4个线程,跳过tests,以此加速编译。这个编译会产生一些必要的源代码,如Catalyst项目下的,因此是必要的一步:html

cd ~/workspace/spark-2.2.0
build/mvn -T 4 -DskipTests clean package
# 编译完成后,测试一下
./bin/spark-shell

这里须要下载不少依赖包,会花一些时间java

  • maven导入

打开IDEA,Import from Project -> 选择spark源代码目录 -> Import from project from external model 并勾选Maven,一路next就导入成功git

  • build报错

Error:(45, 66) not found: type SparkFlumeProtocol
  val transactionTimeout: Int, val backOffInterval: Int) extends SparkFlumeProtocol with Logging {
                                                                 ^
Error:(70, 39) not found: type EventBatch
  override def getEventBatch(n: Int): EventBatch = {

这个问题是因为flume-sink所需的部分源文件idea不会自动下载,全部编译时不能经过。github

解决方式:shell

在intellij ieda里面: 
- 打开View -> Tool Windows -> Maven Projects 
- 右击Spark Project External Flume Sink 
- 点击Generate Sources and Update Folders 
随后,Intellij IDEA会自动下载Flume Sink相关的包apache

而后从新build -> Make Project,一切ok!!bash

This should generate source code from sparkflume.avdl. 
Generate Sources and Update Folders do can resolve type SparkFlumeProtocol not found issue. 
来源: http://apache-spark-developers-list.1001551.n3.nabble.com/A-Spark-Compilation-Question-td8402.htmlmaven

  • 添加运行依赖的jars

再次运行,此次会花费比较长的时间,由于已经能够成功编译LogQuery啦,可是仍是没能运行成功,报错以下:  不要慌,这说明你的代码编译已经成功啦,运行出错的缘由是,运行Spark App通常都是经过spark-submit命令,把你的jar运行到已经安装的Spark环境里,也就是全部的Spark依赖都已经有啦,如今你用IDE的方式,就会缺乏依赖。ide

解决方案以下:测试

Menu -> File -> Project Structure -> Modules -> spark-examples_2.11 -> Dependencies 添加依赖 jars -> {spark dir}/spark/assembly/target/scala-2.11/jars/

  • 添加运行参数

在VM options里添加以下参数:

-Dspark.master=local

而后再run,代码成功运行