Apache Spark源碼走讀之18 -- 使用Intellij idea調試Spark源碼

歡迎轉載,轉載請註明出處,徽滬一郎。html

概要

上篇博文講述瞭如何經過修改源碼來查看調用堆棧,儘管也很實用,但每修改一次都須要編譯,花費的時間很多,效率不高,並且屬於侵入性的修改,不優雅。本篇講述如何使用intellij idea來跟蹤調試spark源碼。linux

前提

本文假設開發環境是在Linux平臺,而且已經安裝下列軟件,我我的使用的是arch linux。git

  1. jdk
  2. scala
  3. sbt
  4. intellij-idea-community-edition

安裝scala插件

爲idea安裝scala插件,具體步驟以下github

  1. 選擇File->Setting

     2 步驟2: 選擇右側的Install Jetbrains Plugin,在彈出窗口的左側輸入scala,而後點擊安裝,以下圖所示sql

      3. scala插件安裝結束,須要重啓idea生效apache

因爲idea 13已經原生支持sbt,因此無須爲idea安裝sbt插件。bash

源碼下載和導入

下載源碼,假設使用git同步最新的源碼intellij-idea

git clone https://github.com/apache/spark.git

導入Spark源碼ide

   1. 選擇File->Import Project, 在彈出的窗口中指定spark源碼目錄idea

   2. 選擇項目類型爲sbt project,而後點擊next

   3. 在新彈出的窗口中先選中"Use auto-import",而後點擊Finish

 

導入設置完成,進入漫長的等待,idea會對導入的源碼進行編譯,同時會生成文件索引。

若是在提示欄出現以下的提示內容"is waiting for .sbt.ivy.lock",說明該lock文件沒法建立,須要手工刪除,具體操做以下

cd $HOME/.ivy2
rm *.lock

手工刪除掉lock以後,重啓idea,重啓後會繼續上次沒有完成的sbt過程。

源碼編譯

使用idea來編譯spark源碼,中間會有屢次出錯,問題的根源是sbt/sbt gen-idea的時候並無很好的解決依賴關係。

解決辦法以下,

   1. 選擇File->Project Structures

   2. 在右側dependencies中添加新的module,

選擇spark-core

其它模塊如streaming-twitter, streaming-kafka, streaming-flume, streaming-mqtt出錯的狀況解決方案與此相似。

注意Example編譯報錯時的處理稍有不一樣,在指定Dependencies的時候,不是選擇Library而是選擇Module dependency,在彈出的窗口中選擇sql.

有關編譯出錯問題的解決能夠看一下這個連接,http://apache-spark-user-list.1001560.n3.nabble.com/Errors-occurred-while-compiling-module-spark-streaming-zeromq-IntelliJ-IDEA-13-0-2-td1282.html

調試LogQuery

1. 選擇Run->Edit configurations

2. 添加Application,注意右側窗口中配置項內容的填寫,分別爲Main class, vm options, working directory, use classpath of module

-Dspark.master=local 指定Spark的運行模式,可根據須要做適當修改。

3. 至此,在Run菜單中能夠發現有"Run LogQuery"一項存在,嘗試運行,保證編譯成功。

4. 斷點設置,在源文件的左側雙擊便可打上斷點標記,而後點擊Run->"Debug LogQuery", 大功告成,以下圖所示,能夠查看變量和調用堆棧了。

 

參考

  1. http://8liang.cn/intellij-idea-spark-development
相關文章
相關標籤/搜索