使用idea編譯spark2.2.0和解決運行sparkPi遇到的問題(詳細)


目錄:

1.使用阿里雲的Maven倉庫加速Spark編譯過程 

2.使用idea導入spark源碼

3.解決幾處build報錯問題

4.使用idea編譯spark生成部署包

5.jar包位置

6.運行源碼example的sparkPi.scala遇到的問題解決

7.調試spark core源碼

 

1.使用阿里雲的Maven倉庫加速Spark編譯過程 

改動pom.xml文件的兩處:(能用國內網網站鏡像,就不用國外的,可以大大減少下載資源的等待時間,也可以避免很多錯誤)

1)修改下載maven倉庫的網站

 <name>Maven Repository</name>

   <!--<url>https://repo1.maven.org/maven2</url>-->

 <url>http://maven.aliyun.com/nexus/content/groups/public/</url>

2maven插件也參考這個修改

<id>central</id>

      <!--<url>https://repo1.maven.org/maven2</url>-->

  <url>http://maven.aliyun.com/nexus/content/groups/public/</url>

3)參考:http://www.kekeyun.com/thread-3385-1-1.html?spm=a2c4e.11153940.blogcont578775.14.571f5eb5HJ8Du5

 

2.使用idea導入spark源碼

目錄在sparkCom\spark511\spark-2.2.0-ali,導入步驟如下。

 

 

 

3.解決幾處build報錯問題

1)使用idea,2分鍾導入成功。build,報錯1:現在解決iml文件重復的問題,刪除目錄下重復的文件即可。

 

2)報錯2:

Error:(45, 66) not found: type SparkFlumeProtocol

  val transactionTimeout: Int, val backOffInterval: Int) extends SparkFlumeProtocol with Logging {

重新下載D:\spark-home\external\flume-sink\src\main\scala\org\apache\spark\streaming\flume\sink資源文件即可。(一分鍾)

 

3)報錯3:

Error:(36, 45) object SqlBaseParser is not a member of package org.apache.spark.sql.catalyst.parser

import org.apache.spark.sql.catalyst.parser.SqlBaseParser._

reimport,build還報這個錯,就重新下載所有資源文件。

4)報錯4:Error:(52, 75) not found: value TCLIService

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

解決完報錯的信息,再次build,就可以成功。

 

此處具體可以參考:https://blog.csdn.net/He11o_Liu/article/details/78739699

4.使用idea編譯spark生成部署包

1)maven projects視圖選擇Spark Project Parent POM(root),然后選中工具欄倒數第四個按鈕(ship Tests mode)按下,這時Liftcycle中test是灰色的

 

2)接着按倒數第一個按鈕進入Maven設置,在runner項設置VM option:

-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m

OK 保存。

3)回到maven projects視圖,點中Liftcycle中package,然后按第5個按鈕(Run Maven Build按鈕),開始編譯。其編譯結果和Maven編譯是一樣的。

好感動,之前好多次用idea+maven編譯沒有成功,編譯終於成功了。

 

5)整個項目編譯的時間較長,如果之后的開發中,只改動了某個包下的源碼,就只需要重新編譯對應的jar包,然后替換對應源碼目錄的jars包,這樣就可以在自己二次開發后的源碼進行調試、運行了。

參考:https://blog.csdn.net/book_mmicky/article/details/25714445

 

5.jar包位置

編譯出來的是一個完整的包,存放./assembly/target/scala-2.10下,這個包包含了Spark編譯得到的jar包,以及編譯過程中所依賴的包。

6.直接運行源碼example的sparkPi.scala

解決幾處error

1)報錯1

Exception in thread "main" java.lang.NoClassDefFoundError: scala/collection/Seq

at org.apache.spark.examples.SparkPi.main(SparkPi.scala)

Caused by: java.lang.ClassNotFoundException: scala.collection.Seq

原因是:scalajar包未導入。

解決方法:project structure->libraries->+ scala sdk

 

再右鍵點擊sdk->add to modules:

 

2)報錯2

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/sql/SparkSession$

at org.apache.spark.examples.SparkPi$.main(SparkPi.scala:28)

at org.apache.spark.examples.SparkPi.main(SparkPi.scala)

Caused by: java.lang.ClassNotFoundException: org.apache.spark.sql.SparkSession$

原因是:spark jar包未引入。

解決:project structure->libraries->+java->剛才編譯好的jar包位置

 

3)報錯3

ERROR SparkContext: Error initializing SparkContext.

org.apache.spark.SparkException: A master URL must be set in your configuration

at org.apache.spark.SparkContext.<init>(SparkContext.scala:376)

解決辦法:設置本地運行模式。在edit configuratios下設置

VM option-Dspark.master=local

 

4)解決完之前的錯誤,可以運行sparkPi,控制台輸出計算的π值。

7.調試spark core源碼

這個部分可以參考:通過打印調用堆棧進行spark源碼跟讀

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM