【原創(chuàng)】Helenykwang 于2018-01-13 18:10:18編寫
不用maven敦腔,不用sbt腺晾,只需三個庫
一、環(huán)境說明
集群:Spark 2.1.2 + hadoop2.3
開發(fā)機OS:win7
Jdk 1.8.0_151
下載jre即可 http://www.oracle.com/technetwork/java/javase/downloads/index.html
注:JDK是一個平臺特定的軟件赞警,有針對Windows验辞,Mac和Unix系統(tǒng)的不同的安裝包。 可以說JDK是JRE的超集唱星,它包含了JRE的Java編譯器雳旅,調(diào)試器和核心類
scala 2.11.8 http://www.scala-lang.org/download/
IntelliJ IDEA 2017.3
spark 源碼spark-2.1.2-bin-hadoop2.3
二、環(huán)境搭建
1. 基本配置
安裝java间聊、scala攒盈,配置環(huán)境變量JAVA_HOME、SCALA_HOME為對應(yīng)安裝路徑
PATH后面添加%JAVA_HOME%\jre\bin; %SCALA_HOME%\bin
【W(wǎng)IN】%JAVA_HOME%
【Linux】$JAVA_HOME
注意:scala 安裝路徑不能有空格哎榴,否則會報錯
>>找不到或無法加載主類scala.tools.nsc.MainGenericRunner
檢驗標準
打開CMD型豁,分別執(zhí)行java僵蛛、scala命令。
2. 安裝配置IntelliJ IDEA 2017.3
初始化后偷遗,在file –settings 中添加scala插件墩瞳,重啟
三、開發(fā)示例
1. 新建工程
其實這里選個java工程就行了氏豌,不用搞那么復(fù)雜喉酌,記住關(guān)鍵是依賴庫java、scala泵喘、spark源碼庫添加好就行泪电。
下圖展示了創(chuàng)建工程時添加java-sdk、scala-sdk的過程纪铺。
創(chuàng)建一些必需的目錄相速,我的demo的目錄樹如下:
在scala目錄右鍵mark Directory as -- Source Root
2. 添加spark源碼依賴
從File – Project Structure 進入,添加Lib鲜锚,按下圖操作完畢后突诬,點擊apply – ok
文件樹的外部庫會出現(xiàn)以下三個:分別是java、spark芜繁、scala【重點強調(diào)唷~ 三者必備旺隙,其他隨意】
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)
? ? ? ? //調(diào)試的時候需要蔬捷,在實際集群上跑的時候可在命令行自定義
? ? ? ? val sc = new SparkContext(sparkconf)
? ? ? ? val rdd=sc.parallelize(List(1,2,3,4,5,6)).map(_*3)? //將數(shù)組(1,2,3,4,5,6)分別乘3
? ? ? rdd.filter(_>10).collect().foreach(println)? //打印大于10的數(shù)字
? ? ? ? println(rdd.reduce(_+_))? //打印 和
? ? ? ? println("hello world")? // demo必備的一句代碼!!! [認真臉]
? }
}
此時,scala編輯界面可能出現(xiàn)這句話榔袋,點擊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文件內(nèi)容如下:
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 <主類名> 最后跟的參數(shù)是我們的jar包。--master指定了集群master侣姆,中間還可以自定義一些spark配置參數(shù)生真,例如:
--num-executors 100 \
? ? ? --executor-memory6G \
? ? ? --executor-cores4 \
? ? ? --driver-memory1G \
? ? ? --confspark.default.parallelism=1000 \
? ? ? --confspark.storage.memoryFraction=0.5 \
? ? ? --confspark.shuffle.memoryFraction=0.3 \
集群上運行成功~~~
總結(jié)
其實看了很多什么maven工程沉噩、scala工程構(gòu)建方法,其實大同小異柱蟀,重點無非是java川蒙、spark、scala的依賴搞好长已,這才是核心問題畜眨。
注意版本一致性,包括:
· 開發(fā)機和集群的spark源碼版本一致
· 開發(fā)IDE中scala插件和系統(tǒng)安裝的scala和集群上scala版本一致
· scala 和spark 版本匹配术瓮。(spark2.x 相比 1.x 有很多不同康聂,請使用scala 2.11+版本)
===================分割線=======================
踩過的坑 ~~~ (??д?)b,歡迎小伙伴們和我分享遇到的問題 (*^__^*) ~~~
錯誤集錦
出錯情況:
命令行運行scala時胞四,找不到或無法加載主類scala.tools.nsc.MainGenericRunner
出錯原因:
scala安裝目錄出現(xiàn)了空格恬汁。
問題解決:
將Scala 移動到?jīng)]有空格的文件夾下。重新設(shè)置SCALA_HOME辜伟。文件解決氓侧。
出錯情況:
編寫程序時,調(diào)用rdd.saveAsTextFile 報錯NullPointerException
出錯原因:
和hadoop文件輸出配置有關(guān)导狡,下個補丁约巷,配置一下即可
解決方法:
1)下載文件winutils.exe
2) 將此文件放置在某個目錄下,比如D:\hadoop\bin\中烘豌。
3)在scala程序的一開始聲明:System.setProperty("hadoop.home.dir","D:\\hadoop\\")
出錯情況:
maven初始化工程時载庭,連接https://repo.maven.apache.org/maven2超時失敗
出錯原因:
PC網(wǎng)絡(luò)自身的問題看彼。不能訪問外網(wǎng)廊佩。
解決方法:
使用maven離線模式,手動把依賴庫導(dǎo)入 <用戶目錄>\\.m\\ repository
Q:什么時候需要maven離線模式呢靖榕?
A:沒有網(wǎng)絡(luò)标锄,只有本地庫,又是用maven來管理項目茁计,在編譯或者下載第三方Jar的時候料皇,老是去中央倉庫上自動下載,導(dǎo)致出問題星压。
1)? ? 全局設(shè)置Work offline 如下圖所示
2)? ? 編輯 <用戶目錄>\\.m\\ settings.xml践剂,寫一行:<offline> true</offline>