1. 程式人生 > >Spark 執行第一個Scala程式WordCount

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中檢視執行結果
這裡寫圖片描述