Spark 2.x+IntelliJ IDEA 2017.3開發環境搭建和開發示例

【原創】Helenykwang 于2018-01-13 18:10:18編寫

不用maven,不用sbt,只需三個庫

一、環境說明

集群:Spark 2.1.2 + hadoop2.3

開發機OS:win7

Jdk 1.8.0_151

下載jre即可 http://www.oracle.com/technetwork/java/javase/downloads/index.html

注:JDK是一個平臺特定的軟件,有針對Windows,Mac和Unix系統的不同的安裝包。 可以說JDK是JRE的超集,它包含了JRE的Java編譯器,調試器和核心類

scala 2.11.8 http://www.scala-lang.org/download/

IntelliJ IDEA 2017.3

spark 源碼spark-2.1.2-bin-hadoop2.3


二、環境搭建

1. 基本配置

安裝java、scala,配置環境變量JAVA_HOME、SCALA_HOME為對應安裝路徑

PATH后面添加%JAVA_HOME%\jre\bin; %SCALA_HOME%\bin

【WIN】%JAVA_HOME%

【Linux】$JAVA_HOME

注意:scala 安裝路徑不能有空格,否則會報錯

>>找不到或無法加載主類scala.tools.nsc.MainGenericRunner

檢驗標準

打開CMD,分別執行java、scala命令。


2. 安裝配置IntelliJ IDEA 2017.3

初始化后,在file –settings 中添加scala插件,重啟


三、開發示例

1. 新建工程

其實這里選個java工程就行了,不用搞那么復雜,記住關鍵是依賴庫java、scala、spark源碼庫添加好就行。

下圖展示了創建工程時添加java-sdk、scala-sdk的過程。


創建一些必需的目錄,我的demo的目錄樹如下:

在scala目錄右鍵mark Directory as -- Source Root


2. 添加spark源碼依賴

從File – Project Structure 進入,添加Lib,按下圖操作完畢后,點擊apply – ok

文件樹的外部庫會出現以下三個:分別是java、spark、scala【重點強調唷~ 三者必備,其他隨意】



3. 編寫程序

新建一個scala文件SparkDemo.scala,代碼如下:

package demo

importorg.apache.spark._

objectSparkDemo{

? def main(args: Array[String]): Unit = {

? ? ? ? val masterUrl = "local[1]"

? ? ? ? val sparkconf = newSparkConf().setAppName("helenApp").setMaster(masterUrl)

? ? ? ? //spark配置,建議保留setMaster(local)

? ? ? ? //調試的時候需要,在實際集群上跑的時候可在命令行自定義

? ? ? ? val sc = new SparkContext(sparkconf)


? ? ? ? val rdd=sc.parallelize(List(1,2,3,4,5,6)).map(_*3)? //將數組(1,2,3,4,5,6)分別乘3

? ? ? rdd.filter(_>10).collect().foreach(println)? //打印大于10的數字

? ? ? ? println(rdd.reduce(_+_))? //打印 和

? ? ? ? println("hello world")? // demo必備的一句代碼!!! [認真臉]

? }

}

此時,scala編輯界面可能出現這句話,點擊setup scala SDK就可以了。

依賴庫添加成功的檢驗標準是,import org.apache.spark._不報錯。

點擊綠色三角形,run~

在console界面正常輸出!(*^__^*)



4. 打包jar包

依舊是從老朋友File–Project Structure 進入,在Artifacts下添加jar。


注意:打包的jar包不需要把spark源碼也搞進去的,因為集群上本身就有spark代碼,所以就留下以下這兩個文件即可~~~ 點擊apply –ok


在主界面,Build—Build Artifacts。開始編譯~~~ 編譯OK后會多出一個out目錄,里面有最終jar包


查看主類,MANIFEST.MF文件內容如下:

Manifest-Version:1.0

Main-Class:demo.SparkDemo


5. 集群上運行jar包

Jar包放到/home/hadoop目錄下

>>spark-submit? --class demo.SparkDemo--master spark://:7077 project_name.jar

說明:--class <主類名> 最后跟的參數是我們的jar包。--master指定了集群master,中間還可以自定義一些spark配置參數,例如:

--num-executors 100 \

? ? ? --executor-memory6G \

? ? ? --executor-cores4 \

? ? ? --driver-memory1G \

? ? ? --confspark.default.parallelism=1000 \

? ? ? --confspark.storage.memoryFraction=0.5 \

? ? ? --confspark.shuffle.memoryFraction=0.3 \


集群上運行成功~~~



總結

其實看了很多什么maven工程、scala工程構建方法,其實大同小異,重點無非是java、spark、scala的依賴搞好,這才是核心問題。

注意版本一致性,包括:

· 開發機和集群的spark源碼版本一致

· 開發IDE中scala插件和系統安裝的scala和集群上scala版本一致

· scala 和spark 版本匹配。(spark2.x 相比 1.x 有很多不同,請使用scala 2.11+版本)


===================分割線=======================

踩過的坑 ~~~ (??д?)b,歡迎小伙伴們和我分享遇到的問題 (*^__^*) ~~~

錯誤集錦

出錯情況:

命令行運行scala時,找不到或無法加載主類scala.tools.nsc.MainGenericRunner

出錯原因:

scala安裝目錄出現了空格。

問題解決:

將Scala 移動到沒有空格的文件夾下。重新設置SCALA_HOME。文件解決。


出錯情況:

編寫程序時,調用rdd.saveAsTextFile 報錯NullPointerException

出錯原因:

和hadoop文件輸出配置有關,下個補丁,配置一下即可

解決方法:

1)下載文件winutils.exe

2) 將此文件放置在某個目錄下,比如D:\hadoop\bin\中。

3)在scala程序的一開始聲明:System.setProperty("hadoop.home.dir","D:\\hadoop\\")


出錯情況:

maven初始化工程時,連接https://repo.maven.apache.org/maven2超時失敗

出錯原因:

PC網絡自身的問題。不能訪問外網。

解決方法:

使用maven離線模式,手動把依賴庫導入 <用戶目錄>\\.m\\ repository

Q:什么時候需要maven離線模式呢?

A:沒有網絡,只有本地庫,又是用maven來管理項目,在編譯或者下載第三方Jar的時候,老是去中央倉庫上自動下載,導致出問題。

1)? ? 全局設置Work offline 如下圖所示

2)? ? 編輯 <用戶目錄>\\.m\\ settings.xml,寫一行:<offline> true</offline>

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。