官网下载源码到本地后,须要先进行编译,参考官方文档,编译很简单,这里使用4个线程,跳过tests,以此加速编译。这个编译会产生一些必要的源代码,如Catalyst项目下的,因此是必要的一步:html
cd ~/workspace/spark-2.2.0 build/mvn -T 4 -DskipTests clean package # 编译完成后,测试一下 ./bin/spark-shell
这里须要下载不少依赖包,会花一些时间java
打开IDEA,Import from Project -> 选择spark源代码目录 -> Import from project from external model 并勾选Maven,一路next就导入成功git
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
再次运行,此次会花费比较长的时间,由于已经能够成功编译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,代码成功运行