1. 程式人生 > >使用Intellij idea除錯Spark原始碼

使用Intellij idea除錯Spark原始碼

前提 本文假設開發環境是在Linux平臺,並且已經安裝下列軟體,我個人使用的是arch linux。
  • jdk
  • scala
  • sbt
  • intellij-idea-community-edition

安裝scala外掛 為idea安裝scala外掛,具體步驟如下
  • 選擇File->Setting

 
     2 步驟2: 選擇右側的Install Jetbrains Plugin,在彈出視窗的左側輸入scala,然後點選安裝,如下圖所示
 
      3. scala外掛安裝結束,需要重啟idea生效 由於idea 13已經原生支援sbt,所以無須為idea安裝sbt外掛。
原始碼下載和匯入
下載原始碼,假設使用git同步最新的原始碼
  1. git clone https://github.com/apache/spark.git
複製程式碼

匯入Spark原始碼    1. 選擇File->Import Project, 在彈出的視窗中指定spark原始碼目錄
 
   2. 選擇專案型別為sbt project,然後點選next
 
   3. 在新彈出的視窗中先選中"Use auto-import",然後點選Finish
 
匯入設定完成,進入漫長的等待,idea會對匯入的原始碼進行編譯,同時會生成檔案索引。
如果在提示欄出現如下的提示內容"is waiting for .sbt.ivy.lock",說明該lock檔案無法建立,需要手工刪除,具體操作如下
  1. cd $HOME/.ivy2
  2. 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. 除錯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", 大功告成,如下圖所示,可以檢視變數和呼叫堆疊了。

參考
相關內容


Apache Spark原始碼走讀之1 -- Spark論文閱讀筆記

Apache Spark原始碼走讀之2 -- Job的提交與執行

Apache Spark原始碼走讀之3-- Task執行期之函式呼叫關係分析

Apache Spark原始碼走讀之4 -- DStream實時流資料處理

Apache Spark原始碼走讀之5-- DStream處理的容錯性分析

Apache Spark原始碼走讀之6-- 儲存子系統分析

Apache Spark原始碼走讀之7 -- Standalone部署方式分析

Apache Spark原始碼走讀之8 -- Spark on Yarn

Apache Spark原始碼走讀之9 -- Spark原始碼編譯

Apache Spark原始碼走讀之10 -- 在YARN上執行SparkPi

Apache Spark原始碼走讀之11 -- sql的解析與執行

Apache Spark原始碼走讀之12 -- Hive on Spark執行環境搭建

Apache Spark原始碼走讀之13 -- hiveql on spark實現詳解

Apache Spark原始碼走讀之14 -- Graphx實現剖析

Apache Spark原始碼走讀之15 -- Standalone部署模式下的容錯性分析

Apache Spark原始碼走讀之16 -- spark repl實現詳解

Apache Spark原始碼走讀之17 -- 如何進行程式碼跟讀


Apache Spark原始碼走讀之19 -- standalone cluster模式下資源的申請與釋放

Apache Spark原始碼走讀之20 -- ShuffleMapTask計算結果的儲存與讀取

Apache Spark原始碼走讀之21 -- WEB UI和Metrics初始化及資料更新過程分析

Apache Spark原始碼走讀之22 -- 淺談mllib中線性迴歸的演算法實現

Apache Spark原始碼走讀之23 -- Spark MLLib中擬牛頓法L-BFGS的原始碼實現

Apache Spark原始碼走讀之24 -- Sort-based Shuffle的設計與實現