利用IDEA工具編譯Spark源碼(1.60~2.20)

爲了利用IDE工具調試Spark源碼,分別在macOS上搭建了Spark1.60源碼調試環境,在windows下搭建了Spark2.20調試環境。利用IDE編譯Spark會出現一些通識性問題,下面將針對這些問題的解決方法做詳細描述(macOS與windows通用)

準備

編譯源碼

導入項目

直接利用IDEA導入Spark工程,Import Project中選擇Import project from external model中的Maven

一路next到選擇sdk時配置好JDK即可

配置對應版本的scala SDK

先安裝scala plugin,在設置中的插件管理器中安裝scala插件:

安裝完成後,就需要配置對應版本的Scala SDK了。這一步非常關鍵,如果配置出現了偏差,會導致一堆的錯誤。比如對於Spark1.6.0版本,其項目名稱爲spark-parent_2.10則需要配置scala 2.10版本的編譯器。(Spark2.20對應着Scala2.11) 具體的版本可以去參考官方文檔。

配置方法如下:選擇File -> Project Structure中的Global Libraries,點擊+號,選擇正確的scala版本,如果沒有的話點擊Download下載。

點擊ok後選擇添加到全部的modules

編譯過程

在設置裏面記得點上Rebuildclear project

第一次編譯

第一次編譯直接選擇build project即可。這時候會出現第一個問題:

Spark官方文檔中這麼說:

“Rebuild Project” can fail the first time the project is compiled, because generate source files are not automatically generated. Try clicking the “Generate Sources and Update Folders For All Projects” button in the “Maven Projects” tool window to manually generate these sources.”

在IDEA中進行如下操作:View->Tool Windows-> Maven Projects

右邊會有Maven Projects的目錄欄,選擇出問題的Flume Sink,右鍵菜單選擇Generate Sources and Update Folders

第二次編譯

開始Rebuild,1.60版本將直接編譯成功:

而對於2.20版本可能會出現以下問題:

spark\sql\hive-thriftserver\src\main\java\org\apache\hive\service\cli\thrift\ThriftCLIService.java

Error:(52, 75) not found: value TCLIService

public abstract class ThriftCLIService extends AbstractService implements TCLIService.Iface, Runnable {………..

針對這種情況,只用在spark\sql\hive-thriftserver\src\gen\java右鍵中點Mark Directory as->Sources Root即可

跑案例

先配置好要跑的WordCount,如下圖設置,其中設置了本地運行,設置了WordCount的輸入。

這時候會出現如下錯誤:

這是沒找到其依賴庫導致的,打開./examples/spark-examples_2.10.iml ,將中間的scope="PROVIDED"全部刪除(觀察了一下,默認爲compile,比手動去設置裏面調效率高多了)重新Build即可正確運行。

運行如下:

直接編譯

如果不想用IDE配置各種編譯環境,編譯Spark就簡單多了,編譯如下:

經過一段時間的編譯:

測試編譯是否成功:

參考文獻

https://siliconhalli.org/2017/02/09/spark-build-spark-from-source-on-windo/

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

http://chant00.com/2017/03/06/sparkSourceCompile/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章