Scala2.11.8 + Sbt + Maven + IntelliJ Idea + Spark2.0開發環境搭建備忘

已有Hadoop yarn 和 Spark 集羣部署、運行在分佈式環境中,程序開發編碼在PC上,因爲逐漸增多Scala編寫spark2.0程序,入鄉隨俗使用sbt和IntelliJ Idea,順便對PC上的Scala + sbt + maven + IntelliJ Idea一些要注意的開發環境配置細節進行記錄,側重於如今網上比較少總結又可能讓人有些困擾的部分,目前這方面總結比較完整的文章好像還比較少(也多是本身看的不夠多),有些內容也是google國外和本身摸索的,在此進行記錄,一方面方便跟可能有一樣需求的程序猿們討論交流,一方面給作個備忘記錄。java

 

總體上主要是如下幾個步驟。linux

1. Java JDK 安裝與配置web

2. Scala2.11.8 安裝與配置sql

3. maven 安裝與配置設置文件apache

4. sbt 安裝與配置sbt-lauch.jar包網絡

5. 集成開發環境IDE IntelliJ Idea 安裝與配置插件maven

6. 經過sbt依賴建立 Spark2.0 項目編輯器

 

1. Java JDK 安裝與配置分佈式

官網下載對應操做系統的安裝包,作好環境變量配置,命令行java 相關命令成功執行,網上不少參考文檔,很少敘述。ide

 

2. Scala 安裝與配置

官網下載對應操做系統的安裝包,作好環境變量配置,命令行scala相關命令成功執行,網上不少參考文檔,很少敘述。

 

 

3. maven 安裝與配置設置文件

maven或sbt等開發管理軟件的使用,在開發中可以較爲系統的生成開發目錄結構,管理依賴關係,幫開發人員節省時間,提升效率,固然具體使用與否仍是看我的實際開發狀況選擇,沒有maven或sbt等管理軟件也能夠照樣開發。

官網下載對應操做系統的安裝包,解壓到本身設定的目錄,成功執行mvn相關命令。

(1)因爲國內鏈接默認maven倉庫,網絡情況和速度是個老大難問題,能夠在maven目錄下conf/settings.xml文件配置修改<mirrors></mirrors>部分,查找並增長國內外的當時仍有效的快速maven倉庫鏡像,好比阿里雲的maven倉庫鏡像。先備份原有settings.xml文件,再以下修改當前settings.xml。

<mirror> 

    <id>nexus-aliyun</id>

    <name>Nexus aliyun</name>

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

    <mirrorOf>central</mirrorOf> 

</mirror>

(2)本地下載保存依賴的目錄路徑,默認是.m2下面(Linux用戶家目錄裏面,Windows C盤用戶目錄裏面),能夠改成其餘指定目錄,修改conf/settings.xml文件,<localRepository>修改成指定路徑</localRepository>,以防在用戶目錄下被誤刪或受到其餘影響。

(3)這時候沒有安裝IDE,能夠經過mvn命令生成maven項目,修改pom.xml,管理項目依賴包,進行代碼編寫,編輯器自選。

 

4. sbt 安裝與配置sbt-lauch.jar包

爲了進行scala+spark的開發,入鄉隨俗使用sbt,官網下載對應操做系統的安裝包,解壓或安裝到本身設定的目錄,成功執行sbt相關命令。

(1)一樣的,sbt國內鏈接默認倉庫,網速老大難,下載過程極其緩慢,測速可低至0-2KB/S,典型小水管,還有可能中途鏈接被斷開,因此一樣須要作更改倉庫鏡像的嘗試。

修改的方法有幾種不一樣的方式,考慮到最終調用的是sbt路徑下的bin/sbt-launch.jar,這裏採用了直接修改sbt-launch.jar的方式。

先複製備份原有sbt-launch.jar文件,再打開當前修改編輯的sbt-launch.jar中的sbt/sbt.boot.properties,這裏修改了[repositories]的local部分, maven-central沒有改,添加了幾個網上找的鏡像源,都加上去了,也不必定是最快的,速度目前在我的可接受範圍內。

  aliyun-nexus: http://maven.aliyun.com/nexus/content/groups/public/  
  ibiblio-maven: http://maven.ibiblio.org/maven2/
  typesafe-ivy: https://dl.bintray.com/typesafe/ivy-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
  uk-repository: http://uk.maven.org/maven2/
  jboss-repository: http://repository.jboss.org/nexus/content/groups/public/

(2)sbt使用了ivy,默認將依賴包保存在家目錄或C盤用戶目錄.ivy下面,若是以爲默認路徑不合適,能夠把sbt.boot.properties文件的[boot]和[ivy]目錄修改成指定目錄,好比ivy-home是cache依賴包路徑,打比方能夠改成/home/user/.../ivy-home/  或者  F:\...\ivy-home\,而後指定路徑下生成的cache目錄將具體存儲sbt項目依賴包。 

(3)使用sbt命令生成項目模板,能夠編寫build.sbt,進行依賴管理。

 

5. 集成開發環境IDE IntelliJ Idea 安裝與配置插件

上面的開發環境配置完成,已能夠進行項目開發,我的以爲沒有結合IDE使用來的方便,scala、java開發IDE選擇見仁見智,IntelliJ Idea比較適合本人口味。

官網下載對應操做系統的安裝包,對比免費和付費版本功能,免費的community版通常夠用了,解壓或安裝到指定路徑。

(1)打開IntelliJ Idea,在彈出的啓動界面中,先進行默認的項目配置(注意是default project配置,之後每一個生成的當前項目current project都會先採用該默認配置),包括插件安裝、參數配置等。打開可見目前安裝的版本屬於2016.2,截圖界面中,選擇configure中的settings。

(2) 左側選擇plugins,默認已自帶maven插件,在browse repositories輸入scala,查找並下載安裝scala插件,一樣完成sbt插件安裝。IDE下載這些插件的做用一般是用於鏈接IDE和對應的軟件,好比上面已裝好的scala,sbt,maven,經過插件方便在IDE調用已裝軟件的命令和功能,有效地進行開發。

(3)插件安裝完成後,點擊左側Build, Execution, Deployment,在Build Tools裏面分別maven和sbt插件進行設置,確保插件調用的不是idea默認下載的maven和sbt軟件,而是上述本身手動安裝的比較新的maven和sbt。

maven的設置,首先看到界面右上角,確認是有一行小字「For default project」,代表是作默認項目配置,若是項目生成後,一樣此處的配置界面,將是"For current project",表示只爲當前項目作獨立設置。而後對界面上maven home目錄進行選擇,選取上面本身下載的maven目錄;設置文件選擇maven下的conf/settings.xml,override打勾替換默認的文件;local 倉庫位置選擇前面設置好的maven本地倉庫路徑。

因爲maven下載默認倉庫依賴時,會下載一個模板文件archetype-catalog.xml,網速慢狀況下過於耗時,可能致使下載界面卡住停滯,能夠在界面的maven-->runner中設置運行參數,在VM Options寫上參數:-DarchetypeCatalog=internal,表示用本地的archetype-catalog.xml,跳過自動網絡下載卡住的步驟,而後手動http鏈接web網頁,在maven鏡像或中央倉庫經過下載路徑 org\apache\maven\archetype\archetype-catalog\相應版本號\,下載archetype-catalog.xml,放置在本地maven倉庫路徑的 org\apache\maven\archetype\archetype-catalog\相應版本號\  的對應目錄位置裏面。這樣maven插件基本設置完了。

相似的,點擊sbt插件,在設置界面將sbt軟件由idea打包的bundled選項改成custom,選擇上面安裝sbt軟件的已經修改好的bin/sbt-launch.jar。

接下來還須要在設置界面左側other settings--->SBT中,去掉Use IDE Settings選項,配置使用本身安裝的sbt包和參數,包括下方的SBT laucher JAR file,須要明確地選擇本身的sbt軟件包,sbt插件才能在idea中按照指望正確地工做。

這個時候回到原來啓動界面,選擇建立生成新項目,maven或sbt項目,或者直接的java、scala項目,一般已經能夠正常工做了,過程不作敘述,網上有不少參考。

 

6. 經過sbt依賴建立Spark2.0項目

首先在建立的sbt項目中,修改build.sbt,下載spark2.0依賴包,scala編寫spark程序,生成jar包放到spark2.0研發的分佈式集羣運行測試

(1) 在建立新項目界面中,選擇scala--->sbt,在生成的界面中設置項目名稱和保存位置,程序根目錄。

(2)選擇finish,sbt插件將自動調用上述本地安裝sbt軟件,下載默認依賴包,生成sbt項目結構目錄,這裏第一次建立須要耐心等待一段時間,等待項目依賴包都下好,sbt代碼木結構才能生成。

(3)在生成的sbt項目中,編輯build.sbt,在scalaVersion後面添加spark依賴,注意格式要求,每行之間還要空一行。spark依賴有兩種編寫方式。

一種是不明確指定spark庫的版本,在依賴包的組織部分 "org.apache.spark" 後面加兩個%號,讓sbt本身去倉庫源裏面根據scala版本匹配,例如


libraryDependencies += "org.apache.spark" %% "spark-core" % "2.0.0" 。


另外一種是明確指明spark庫版本,依賴包組織部分 "org.apache.spark" 後面只加一個%號,例如

 

libraryDependencies += "org.apache.spark" % "spark-core_2.11" % "2.0.0"

libraryDependencies += "org.apache.spark" % "spark-mllib_2.11" % "2.0.0"

libraryDependencies += "org.apache.spark" % "spark-streaming_2.11" % "2.0.0"

libraryDependencies += "org.apache.spark" % "spark-sql_2.11" % "2.0.0"

libraryDependencies += "org.apache.spark" % "spark-graphx_2.11" % "2.0.0"

編寫好build.sbt,保存刷新,將下載spark依賴,正常狀況下等待下載完,依賴添加成功,能夠經過spark API編寫程序。

 

可是有時候因爲與源倉庫的網速太慢等緣由,依賴庫的下載未必順利,致使build.sbt文件老是顯示unresolved dependencies,就是指下載庫沒有下載完整,或配置文件沒有記錄完整, 好比網絡慢致使spark的某些包沒下下來,也沒什麼好辦法,只能在idea sbt插件窗口繼續刷新下載,若是刷新後sbt下載不正常工做,能夠將sbt配置的本地下載庫路徑cache裏相關依賴包目錄刪除,好比org.apache.spark,而後將本地下載庫路徑下面與cache目錄平行的幾個生成配置文件刪除(作了測試,有時候spark依賴包已所有下載完成,但不知什麼緣由,這幾個配置文件可能沒有相應更新,致使idea中sbt插件仍然顯示unresolved dependencies,刪除配置文件後再刷新sbt,再也不顯示錯誤,添加成功),從新刷新和下載,正常狀況下能夠完成依賴,build.sbt文件不會報錯unresolved dependencies。

 

若是更換了硬盤或重裝了系統,原來Idea仍可以使用,若是build.sbt添加庫之後依賴解析報錯,相似invalid ivy2 cache找不到,能夠在Idea的Build下SBT配置 JVM Options,原來的VM Parameters爲-XX:MaxPermSize=384M,繼續添加-Dsbt.ivy.home=.../ivy-home,-Dsbt.boot.directory=.../sbt-dir/boot,指明cache庫所在路徑,該路徑應與使用的sbt插件中相關路徑一致。

 

(4)接下來能夠寫個簡單的hello spark程序,import spark的一些基礎包,試試是否能夠正常經過sbt編譯和打包,放到集羣運行。因爲程序很簡單,只是打印了sparkcontext的類名,setMaster使用local參數,表示讓Spark運行在單機單線程上而不用鏈接到spark集羣,能夠直接在idea裏面run一下直接查看結果。若是有條件,spark程序開發,建議打包在研發測試集羣上運行,分佈式程序編寫環境和運行環境儘可能分開,若是有問題,在運行集羣裏面去查看日誌,對比程序,查找定位問題,不用什麼都在IDE裏完成,我的認爲IDE做用是有利於方便編寫代碼這個步驟。在研發集羣多方面測試經過,再部署到生產環境集羣當中。

相關文章
相關標籤/搜索