搭建 Spark 源碼研讀和代碼調試的開發環境

skxe3313 8年前發布 | 27K 次閱讀 Spark 分布式/云計算/大數據

搭建Spark源碼研讀和代碼調試的開發環境

      • 從Github上獲取Spark源碼
      </li>
      • 導入源碼到Intellij IDEA 16
        • 2. 添加缺失的flume sink源代碼
        • 3. 添加運行依賴的jars
        • </ul> </li> </ul> </li> </ul> </li> </ul>

          工欲善其事,必先利其器,第一篇筆記介紹如何搭建源碼研讀和代碼調試的開發環境。 一些必要的開發工具,請自行提前安裝:

          • scala 2.11.8
          • sbt 0.13.12
          • maven 3.3.9
          • git 2.10.2
          • IntelliJ IDEA 2016.3 (scala plugin)

          本人使用macOS 10.12,所有筆記都基于這個系統,但是其他系統也可以很容易找到對應的解決方案,比如IDE的快捷鍵。

          源碼獲取與編譯

          從Github上獲取Spark源碼

          可以直接從Spark官方Github倉庫拉取。本系列筆記基于 Spark 2.0.2 這個版本,所以先checkout這個tag,再進行之后的步驟:

          $ git clone git@github.com:apache/spark.git
          $ cd spark
          $ git tag
          $ git checkout v2.0.2 
          $ git checkout -b pin-tag-202

          如果想要push自己的commits,也可以fork到自己的Github賬號下,再拉取到本地。

          編譯Spark項目

          參考官方文檔,編譯很簡單,這里使用4個線程,跳過tests,以此加速編譯。這個編譯會產生一些必要的源代碼,如Catalyst項目下的,所以是必要的一步:

          $ build/mvn -T 4 -DskipTests clean package

          編譯完成后,測試一下

          $ ./bin/spark-shell</pre>

          源碼導入與代碼運行

          導入源碼到Intellij IDEA 16

          現在IDEA對scala支持已經比較完善,導入Spark工程非常簡單:

          Menu -> File -> Open -> {spark dir}/ pom.xml -> Open as Project

          運行實例代碼

          導入工程后,介紹一下如何運行Spark項目自帶的實例代碼,在 {spark dir}/examples/ 目錄下,這里以 LogQuery 為例:

          command + o -> 輸入LogQuery打開

          1. 配置運行參數:

          Menu -> Run -> Edit Configurations -> 選擇 + -> Application

          參數配置如下:

          VM options: -Dspark.master=local 代表使用本地模式運行Spark代碼,也可以選擇其他模式。 保存配置后,可以看到 LogQuery 在運行選項里了:

          2. 添加缺失的flume sink源代碼

          首次運行 LogQuery 會報錯,因為IDE找不到flume依賴的部分源碼: 解決方案如下:

          Menu -> File -> Project Structure -> Modules -> spark-streaming-flume-sink_2.11 -> Sources 1. 把 target目錄加入Sources(點擊藍色Sources) 2. 把子目錄sink也加入Sources

          參考下圖,注意右邊的Source Folders列表:

          3. 添加運行依賴的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/

          有兩點需要注意:

          • jars/*.jar: 這些依賴jars是在第一步編譯打包Spark項目的時候產生的,如果這個目錄是空的,或者修改了源代碼想更新這些jars,可以用同樣的命令再次編譯Spark:

            $ build/mvn -T 4 -DskipTests clean package
          • 從上圖中右側的Scope一欄可以看到,基本上所有依賴jars都是Provided,也就是說默認都是提供的,因為默認都是用 spark-submit 方式運行Spark App的。

          4. 成功運行實例代碼

          終于再次運行 LogQuery 的時候,可以看到輸出啦:

          單步調試源代碼

          千辛萬苦地終于讓實例代碼在IDE里跑起來了,是不是很有成就感。其實做了那么多的鋪墊工作,在IDE里面運行代碼的最大福利是可以 單步調試 ! 很簡單,選擇斷點,然后 Run -> Debug ,可以看到中間變量值等等,其他的自行探索吧:

           

          來自:https://github.com/linbojin/spark-notes/blob/master/ide-setup.md

           

 本文由用戶 skxe3313 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!