爲了利用IDE工具調試Spark源碼,分別在macOS上搭建了Spark1.60源碼調試環境,在windows下搭建了Spark2.20調試環境。利用IDE編譯Spark會出現一些通識性問題,下面將針對這些問題的解決方法做詳細描述(macOS與windows通用)
準備
- IDEA 工具 https://www.jetbrains.com/idea/
- Spark 源碼 https://spark.apache.org/
編譯源碼
導入項目
直接利用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
編譯過程
在設置裏面記得點上Rebuild
時clear 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