-
获取源码
官网下载源码到本地后,需要先进行编译,参考,编译很简单,这里使用4个线程,跳过tests,以此加速编译。这个编译会产生一些必要的源代码,如Catalyst项目下的,所以是必要的一步:
cd ~/workspace/spark-2.2.0build/mvn -T 4 -DskipTests clean package# 编译完成后,测试一下./bin/spark-shell
这里需要下载很多依赖包,会花一些时间
-
maven导入
打开IDEA,Import from Project -> 选择spark源代码目录 -> Import from project from external model 并勾选Maven,一路next就导入成功
-
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不会自动下载,所有编译时不能通过。
解决方式:
在intellij ieda里面:
- 打开View -> Tool Windows -> Maven Projects - 右击Spark Project External Flume Sink - 点击Generate Sources and Update Folders 随后,Intellij IDEA会自动下载Flume Sink相关的包然后重新build -> Make Project,一切ok!!
This should generate source code from sparkflume.avdl.
Generate Sources and Update Folders do can resolve type SparkFlumeProtocol not found issue. 来源:-
添加运行依赖的jars
再次运行,这次会花费比较长的时间,因为已经可以成功编译LogQuery
啦,但是还是没能运行成功,报错如下: 不要慌,这说明你的代码编译已经成功啦,运行出错的原因是,运行Spark App一般都是通过spark-submit
命令,把你的jar运行到已经安装的Spark环境里,也就是所有的Spark依赖都已经有啦,现在你用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,代码成功运行