Spark 執行第一個Scala程式WordCount
安裝
首先去官網下載Spark。注意Spark和Hadoop之間版本對應關係,我自己裝的Hadoop 2.7.5版本,按照下面方式下載即可。
下載完成後,解壓安裝包至路徑/usr/local
tar -zxf ./spark-2.3.0-bin-hadoop2.7.tgz -C /usr/local/
cd /usr/local
sudo mv ./spark-2.3.0-bin-hadoop/ ./spark #更改資料夾名
sudo chown -R hadoop ./spark #此處的hadoop為系統使用者
配置Spark的Classpath
cd /usr/local/spark
cp ./conf/spark-env.sh .template ./conf/spark-env.sh
接著編輯該配置檔案,在檔案最後面加上如下一行內容
export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)
儲存配置檔案後,就可以啟動,若需要使用HDFS中的檔案,則在使用Spark前需要啟動Hadoop。
這裡簡單的單機安裝就可以了,關於叢集安裝可以參考其他資料。
第一個Spark程式
首先在IDEA中新增Scala支援外掛
依次點選File->New->Project,選擇Scala->SBT,SBT是一款Spark用來對scala編寫程式進行打包的工具。下一步,開啟如下視窗:
Scala的版本2.11.8,使用./bin/spark-shell進入shell時我們可以看到版本資訊。
建立完成後會進行初始化操作,自動下載jar包等。下載時常看具體網路情況。待所有進度條完成後,專案目錄已經出來了,如下:
編輯build.sbt檔案
name := "SparkDemo"
version := "1.0"
scalaVersion := "2.11.8"
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.3.0"
這裡添加了依賴的jar包。前面,我們建立專案時已經勾選了自動匯入,編輯完成後,IDEA就會自動下載匯入spark-core相關的jar包。
上面配置完成後,就可以開始程式碼編寫。src->scala右擊新建一個scala的單例物件WordCount,程式碼如下:
object WordCount {
def main(args: Array[String]): Unit = {
val wordFile = "file:///usr/local/spark/mycode/wordcount/word.txt"
val conf = new SparkConf().setAppName("wordcount");
val sc = new SparkContext(conf)
val input = sc.textFile(wordFile, 2).cache()
val lines = input.flatMap(line=>line.split(" "))
val count = lines.map(word => (word,1)).reduceByKey{case (x,y)=>x+y}
val output = count.saveAsTextFile("/home/hadoop/hellospark")
}
}
接著將上面程式碼打成jar包,開啟Project Structure,選擇Artifacts,點選右上角加號,配置jar打包資訊。
這裡有兩個選項,第一個會打包依賴,這裡不打包依賴,選下面一個。配置jar包完成後,Build->Build Artifacts,等待build完成。完成後會在專案下生成一個out目錄,out目錄下面會生成很多jar,我們生成的是sparkdemo.jar。
執行程式
在/usr/local/spark/mycode/wordcount目錄下建立word.txt檔案。
hello world
hello spark
my name is scala
This is my first Spark programm.
Spark is good
使用下面的命令
./bin/spark-submit --class "WordCount" /home/hadoop/Desktop/sparkdemo.jar
這裡Spark依賴於Hadoop的分散式檔案系統HDFS,到HDFS中檢視執行結果