使用scala編寫spark腳本的話,可以直接在spark-shell中運行,如果要提交整個腳本的話,就必須將scala腳本編譯成Jar包,然後通過spark-submit 提交Jar包給spark集羣,當需要重複利用腳本的話一般是需要編譯成Jar包的,所以後面會介紹下怎麼將scala編譯成Jar包,前面則會介紹下怎麼搭建spark-scala的開發環境,同時使用IntelliJ Idea編寫scala腳本。
一 環境搭建
平臺:Mac book 64位 OS X ver10.11.3 (windows和linux可借鑑,可能有點小區別)
依次安裝如下軟件:
1、Java
下載地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
任選一個即可,本文選用的版本
JDK8ver 1.8都可以
將下載文件解壓即可,在控制檯輸入Java –version出現如下字樣安裝成功。
如果安裝了控制檯卻出不來以上結果,可按照第3步scala的環境配置操作一樣添加Java環境變量。
2、spark
下載地址:http://spark.apache.org/downloads.html
本文選用的版本
1.5.1(Oct 02 2015)
Pre-Built forHadoop 1.X
將下載文件解壓即可,pre-build已經事先編譯好了
3、Scala
下載地址:http://www.scala-lang.org/download/all.html
本文選用的版本
2.10.6(爲避免編譯錯誤,最好不要選取2.11以上的,存在衝突)
解壓到合適文件夾,記得將scala添加到環境變量裏,如下:
首先在控制檯輸入 open~/.bash_profile,添加如下文本:
# 根據自己的scala地址修改下添加
export SCALA_HOME=/Users/krzhou/software/scala-2.10.6
export PATH=$SCALA_HOME/bin:$PATH
添加完後在控制檯輸入 source ~/.bash_profile 重新讀入環境生效
4、IntelliJ IDEA
下載地址:https://www.jetbrains.com/idea/
選用free版本,按流程安裝即可,當到了需要選裝插件的環節,添加scala插件即可。
其中不激活的話就先選evaluate for free
在default plugins的時候默認即可,feature plugins的時候記得選scala插件安裝
二 構建項目
要使用Idea編寫spark腳本需要在scala項目中添加spark/scala的Jar包。
首先創建項目
點擊菜單欄File-New-project…-scala-scala,點擊next,修改參數如下:
Project SDK是java文件夾的lib,Scala SDK是scala文件夾的lib。
導入Jar包:
① 導入scala 包
點擊File-Project Structure-Libraries,點擊+號-scala SDK,添加scala文件夾裏lib裏的scala-compiler.jar/scala-library.jar/scala-reflect.jar(這一步貌似不是必須的,因爲前一步裏已經導入了scala的SDK了)
② 導入spark包
點擊+號-Java,添加spark文件夾lib裏的spark-assembly-1.5.1-hadoop1.2.1.Jar
創建腳本
右鍵SparkPi_Test裏的src, 創建Scala class
添加如下文本:(scala腳本):
<span style="font-size:14px;">/** Computes an approximation to pi*/
import scala.math.random
import org.apache.spark._
object SparkPi {
defmain(args:Array[String]){
valconf = newSparkConf().setAppName("Spark Pi").setMaster("local")
valspark = newSparkContext(conf)
valslices = if(args.length > 0) args(0).toInt else 2
valn = math.min(100000L * slices,Int.MaxValue).toInt // avoid overflow
valcount = spark.parallelize(1 until n, slices).map { i =>
valx = random * 2 - 1
valy = random * 2 - 1
if(x*x + y*y < 1) 1 else0
}.reduce(_+ _)
println("Pi is roughly " + 4.0 * count / n)
spark.stop()
}</span><span id="transmark"></span>
點擊菜單欄的Run-run SparkPi運行,
出現如下結果表示運行成功,顯示Pi的值約爲3.14598
三 編譯Jar包
接下來將第二步編寫的項目編譯成可執行的Jar包。
點擊File-project structure-Artifacts,點擊+號添加如下
輸入Main class名字SparkPi(跟運行的主程序名字保持一致),點擊ok
勾選所有的Extracted的Jar包,點擊—號去掉,並勾選build on make
點擊菜單欄build-build Artifacts-build,當左邊目錄下出現如下的SparkPi_Test.jar的jar包時,編譯成功。
最後在控制檯使用
/Users/krzhou/spark-hadoop/bin/spark-submit SparkPi_Test.jar --class SparkPi
提交查看運行結果:
如圖:Pi is roughly 3.14828,運行成功。
以上只是介紹了一種編譯Jar包的方式,應該還有使用sbt等輔助工具的方式,暫時還不是很瞭解。
如果有不足的地方,歡迎一起討論!