Spark2.0源碼閱讀環境和Spark開發環境,我們選擇使用IDEA社區版,所以下載IDEA社區版;並且使用Java8環境。
下載略
解壓到當前目錄
tar -xzvf jdk-8u101-linux-x64.tar.gz
…………
查看
移動到相應目錄(自己新建的目錄)
mv jdk1.8.0_101 /home/hjr/develop/java8
下載略
解壓到當前目錄
tar -xzvf ideaIC-2016.2.2.tar.gz
…………..
查看
移動到相應目錄
mv idea-IC-162.1628.40 /home/hjr/develop
IDEA最新版界面
打開之後選擇設置主題,在選擇安裝插件,我這裡已經安裝好了Scala插件,就不再截圖了
下載地址
https://git-scm.com/downloads/
選擇相應的系統下載(我們是Linux)
我們是Ubuntu16.04,所以我們使用以下命令在線安裝:
apt-get install git
我們是hjr用戶,沒有root權限,所以加上sudo
sudo apt-get install git
查看版本
我們使用Github上的Spark源碼作為源碼下載地址:(也可以直接到Spark官網上面去下載,然後Import進來,都是可以的)
Spark官方的Github源碼地址
https://github.com/apache/spark
Spark官網下載地址
http://spark.apache.org/downloads.html
設置GitHub登錄信息
密碼驗證
設置Spark源碼下載地址:
點擊Clone,開始下載Spark源碼
漫長的等待(時長由自己的網絡決定)。。。。。。
打開項目的時候,IDEA會根據Maven工程的POM文件自動下載所需要的Jar包:
等待。。。。。。
終於jar包下載完成,打開了項目,如下圖所示:
打開File–>Project Structure–>Platform settings–>SDKS選擇Java的安裝路徑即可Apply即可
然後選擇Setup JDK,就會自動識別我們剛才設置的的JDK
等待項目Updating……
項目更新完之後效果如下圖所示:(沒有報錯了)
有問題:(各種找不到呗)
Error:(45, 66) not found: type SparkFlumeProtocol
val transactionTimeout: Int, val backOffInterval: Int) extends SparkFlumeProtocol with Logging {
Error:(70, 39) not found: type EventBatch
override def getEventBatch(n: Int): EventBatch = {
Error:(85, 13) not found: type EventBatch
new EventBatch("Spark sink has been stopped!", "", java.util.Collections.emptyList())
這是下載jar包的時候,沒有下載完全,再來一次就行,或者再來多次就行了。
View –> Tool Windows –> Maven Projects –>Generate Sources and Update Folders For All Projects(兩個箭頭首尾相連的那個按鈕),然後等待…(這個過程如果你需要關閉idea,隨意就行,因為重啟idea後它會繼續)
(我這裡來了兩次,終於下載完全了,現在是編譯的過程,沒有報錯了,一大堆Warning…不管咯)
編譯成功之後,如下圖所示:
運行一個Example實例:
運行LocalPi,又報錯了:
Exception in thread "main" java.lang.NoClassDefFoundError: scala/Function1
at org.apache.spark.examples.LocalPi.main(LocalPi.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Caused by: java.lang.ClassNotFoundException: scala.Function1
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 6 more
Process finished with exit code 1
錯誤原因分析:Scala 的版本與 Spark2.0所使用的Scala版本不匹配
這裡Spark2.0默認使用的是Scala2.11.8,所以我們也得將我們的Scala調整為Scala2.11.8
IDEA安裝的Scala插件裡所對應的Scala版本不是2.11.8,具體是哪個版本我們得查看一下。