Spark開發環境搭建(IDEA、Maven)
在搭建開發環境之前,請先安裝好scala開發環境和spark:
scala:https://blog.csdn.net/qq_39429714/article/details/84332869
spark:https://blog.csdn.net/qq_39429714/article/details/84332698
此時,我們的IDEA已經能做普通的scala開發;
如果要開發spark程式,只要引入spark相關的依賴即可
(即匯入spark相關的jars);
匯入spark相關的依賴有兩個辦法:
1、引入相關的jars(操作簡單)
2、使用maven/sbt管理jars(操作複雜)
Maven簡介
Maven是一個跨平臺的專案管理工具(Apache開源專案)。它主要服務於基於Java平臺的專案構建、依賴管理和專案資訊管理;
很多Java應用都會借用第三方的開源類庫,這些類庫都可通過依賴的方式引入到專案中來。隨著依賴的增多,版本不一致、版本衝突、依賴臃腫等問題都會接踵而來;
Maven提供了一個優秀的解決方案,通過一組座標Maven能夠找到任何一個Java類庫。Maven給Java類庫世界引入了經緯,讓它們變得有秩序,藉助它來有序地管理依賴,輕鬆地解決那些繁雜的依賴問題;
Maven還為全世界的Java開發者提供了一個免費的中央倉庫,在其中幾乎可以找到任何的流行開源類庫。通過一些工具還能對其進行快速地搜尋。只要定位了座標,Maven就能夠自動下載,省去了手工勞動;
Maven的安裝
1、下載、解壓縮
2、設定環境變數,使環境變數生效
3、mvn –v
備註:僅在安裝IDEA的節點上安裝
Maven會根據專案的pom.xml檔案下載很多的jar,下載後的jar放在:
~/.m2/repository 中 .m2可以先手動在家目錄下建立,IDEA會自動識別或建立
預設要去國外下載,速度非常慢。
我們採用如下方式:
1、將$MAVEN_HOME\conf\settings.xml檔案複製一份到~/.m2目錄下
2、修改預設下載地址,開啟 ~/.m2/settings.xml,大約在檔案的150行,做如下修改:
<mirrors>
<mirror >
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
備註:
1、IDEA引入jar包的時間比較長,下載的jar非常的多,取決於網路和Maven中央倉庫的速度;
2、下載的檔案存放在~/.m2/repository 中,大約有近300M
3、可以事先拷貝 repository 目錄的內容,減少下載的時間
使用Maven管理依賴
步驟:
scala外掛的安裝(已完成)
全域性JDK和Library的設定
全域性JDK和Library的設定:為了避免每次都去配置JDK,這裡進行一次全域性配置。在歡迎介面點選Configure,然後在Project Defaults的下拉選單中選擇Project Structure(也可在開發介面點選 File->other settings -> Project Structure),如下圖所示:
在開啟的Default Project Structure介面的左側邊欄選擇Project,在右側開啟的頁面中建立一個新的JDK選項(本機已經安裝過JDK),如下圖所示步驟在下拉選單中點選JDK後,在開啟的對話方塊中選擇你所安裝JDK的位置,注意是JDK安裝的根目錄,就是JAVA_HOME中設定的目錄。
配置全域性的Scala SDK
在開啟的頁面左側選擇Global Libraries,然後在中間一欄中有一個綠色的加號標誌 +,點選後在下拉選單中選擇 Scala SDK;
在開啟的對話方塊中選擇所安裝的Scala,點選OK確定,這時候會在中間一欄位置處出現Scala的SDK,在其上右鍵點選後選擇Copy to Project Libraries…,這個操作是為了將Scala SDK新增到專案的預設Library中去。
新建maven專案
歡迎介面點選Create New Project,在開啟的頁面左側邊欄中,選擇Maven,然後在右側的Project SDK一項中,檢視是否有正確的JDK配置項。正常來說這一欄會自動填充的,因為在前面已經配置過全域性的Project JDK了。如果這裡沒有正常顯示JDK的話,可以點選右側的New…按鈕,然後指定JDK安裝路徑的根目錄即可,然後點選Next,來到Maven專案最重要三個引數的設定頁面,這三個引數分別為:GroupId, ArtifactId和Version。步驟如下圖所示:
建立 Hello world
在上一步中,已經建立了好一個Maven工程。
1、刪除無用的檔案。主要是 main\java、test;
2、將Scala的框架新增到這個專案中。在左側欄中的專案名稱上右鍵選單中點選Add Framework Support…,然後在開啟的對話方塊左側邊欄中,勾選Scala前面的複選框,然後點選確定即可(前提是上文中所述步驟都已正確走通,否則會看不到Scala這個選項);
3、在main資料夾中建立一個名為 scala 的資料夾,並右鍵點選 scala 資料夾,選擇 Make Directory as,然後選擇Sources Root。意思是將 scala 資料夾標記為一個原始檔的根目錄,在其內的所有程式碼中的 package ,其路徑就從這個根目錄下開始算起。
4、在已經標記好為原始檔根目錄的 scala 資料夾 上,右鍵選擇 New,然後選擇 Scala Class,隨後設定好程式的名稱,並且記得將其設定為一個 Object。正常的話,將會開啟這個 Object 程式碼介面,並且可以看到IntelliJ IDEA自動添加了一些最基本的資訊;
5、完成Hello World程式的編寫,並執行。
匯入spark依賴
此時已經可以成功的執行一個Scala 專案了。想要執行在 spark 上執行還需要匯入相關依賴。開啟pom.xml檔案新增如下依賴(可以先新增部分內容):
https://blog.csdn.net/qq_39429714/article/details/84332157
匯入依賴以後記得點選“Import Changes Enable Auto-Import”,引入jar包(每次更改配置後 ,會自動檢查 repository 目錄的內容,並聯網更改)
編寫wordcount程式碼在IDEA中執行
import org.apache.spark.{SparkConf, SparkContext}
object WordCount {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("wordcount").setMaster("local")
val sc = new SparkContext(conf)
val lines = sc.textFile("hdfs://node1:8020/user/spark/data/a.scala")
lines.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_+_).foreach(println _)
sc.stop()
}
}
// setMaster和file路徑根據實際情況進行修改
打包在spark叢集上執行
setMaster(“local[2]”)要去掉,master靠引數給定
執行成功後,可以將程式碼打包成 jar 傳送到 spark 叢集上執行。步驟如下:點選"File",然後選擇"project Structure"
第一個表示將依賴包一同打包 :jar包獨立 檔案較大(Mb)
第二個表示只將依賴包的依賴路徑打入:jar包不獨立,檔案較小(Kb)
刪除其他不需要的依賴包,如下圖所示,刪除其他不需要的包,只留下紅色矩形中的兩個。
注意:output directory 的路徑,此處是匯出 jar 的路徑。
將最後面的檔名刪除,則第一行的name即為你指定的jar包檔名,否則只是指定了目錄名,檔名預設為專案名
執行 bulid 構建jar
jar 包匯出以後就可以在spark上運行了
spark-submit --master local --class WordCount MyProject.jar