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,代碼成功運行

相關文章
相關標籤/搜索