天天看點

使用Scala寫第一個Spark程式

環境:

1, ubuntu 16.04

2, Intellij

3, jdk1.8

4, Scala2.11

5,Spark 2.1.1

操作過程:

一,安裝好Intellij,配置jdk,這些就不詳細寫了.

二,安裝Scala

1)下載下傳Scala

scala下載下傳位址

這裡注意Scala需要下載下傳2.12之前的,spark目前不支援2.12之後的Scala的版本,之前我就吃了這個虧.

2)解壓

這裡我解壓到自己使用者主目錄下,配置環境變量的話換成應該換成自己解壓的目錄

3)配置環境變量

這裡我忘記是自動配置還是自己配的了,總之如果解壓之後沒有那就自己配置吧.打開目前使用者目錄下的.bashrc檔案,将下邊環境變量配置加到檔案中.

export SCALA_HOME=/home/lovixs/scala-.
    export PATH=${SCALA_HOME}/bin:$PATH
           

4)驗證

輸入scala,如果進入scala的控制台,說明安裝就成功了.

三,安裝Spark

這個下載下傳去官網把Spark下載下傳即可.

spark下載下傳連結

這個解壓到自己的工作目錄即可

注意:這裡如果網絡不好可以換個網絡試一下,我下載下傳的時候就是校園網下不動,cmcc卻很快.

四,在Intellij建立一個項目

1,安裝scala插件

首先在intellij中安裝scala插件,File => Setting => Plugins,在搜尋攔輸入Scala,然後點選下邊Browse Repositories,搜尋到之後點選Install,然後重新開機Intellij即可

2,建立一個Sbt項目

Sbt是類似Maven的一個管理Scala項目和打包的工具,是以這裡直接建立一個Sbt項目.

New => Project => Scala,然後選擇SBT,點選Next即可

這一步可謂是最麻煩的,麻煩倒不是操作麻煩,而是網絡.因為使用sbt來管理和打包scala項目,sbt的一些插件和jar包是真的很慢.網上有一種方法,大家不妨試一試.

* 在.sbt/目錄下 建立 repositories

* 在repositories中寫入一下内容,起始就是把sbt下載下傳的源改為國内的.

[repositories]
  local
  oschina:http://maven.oschina.net/content/groups/public/ 
  oschina-ivy:http://maven.oschina.net/content/groups/public/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
           

然後再下載下傳可能會快點.

當然我試了試貌似對我不感冒,最後用cmcc配置了個代理才成功.

代理是在Setting => Appearance & Behavior => System Setting => HTTP Proxy中配置的,用的shadow socks ,大家可以自行配置,網上教程也很多.

3,WordCount類

在src/main/scala下建立WordCount類,右鍵scala目錄,選擇new => Scala Class,然後輸入類名WordCount,選擇Kind為Object,内容為下.

import org.apache.spark.{SparkConf, SparkContext}

object wordCount {
  def main(args: Array[String]){
    val conf = new SparkConf().setAppName("wordcount")
    val sc = new SparkContext(conf)
    val input = sc.textFile("/home/lovixs/work/spark-2.1.1-bin-hadoop2.7/bin/test")//存儲要分析的文本檔案
    val lines = input.flatMap(line => line.split(" "))
    val count = lines.map(word => (word,)).reduceByKey{case (x,y) => x+y}
    val output = count.saveAsTextFile("/home/lovixs/work/spark-2.1.1-bin-hadoop2.7/bin/helloSparkRes")//存儲處理結果的位置,自行更改
  }
}
           

4,打包代碼

先建立jar包,File => Project Structure => Artifacts ,點選+号,選擇Jar => from modules with dependencies ,然後選擇module,就是剛才我們建立的項目,然後在main class選擇剛才建立的WrodCount類,注意下邊的選項選擇第二個選項,否則intellij會把jar中所有的依賴都打包進去,這樣打出的jar會巨大.

使用Scala寫第一個Spark程式

然後build,生成jar包.build => build artifacts ,然後選擇build就可以了.jar包在項目的out/artifacts/name_of_project_jar目錄下.

五,将打包的jar放到spark叢集上運作(僞叢集,隻有一個worker節點)

1, 為了友善spark登入本機,首先配置本機無密ssh登入.

* ssh-keygen生成本機的公私鑰

* 在~/.ssh目錄下建立authorized_keys檔案,然後cat id_rsa.pub > authorized_keys,把公鑰的内容寫入建立的檔案中

* 更改權限: chmod 600 authorized_keys

2,把打好的jar包,就是剛才項目中的out/artifacts/name_of_project_jar目錄下的以項目名為名字的jar包拷貝一個特定的目錄.

3,啟動叢集

進入spark檔案夾中,

./sbin/start-master.sh

啟動叢集.使用jps可以檢視目前叢集中的節點.

4,啟動worker節點

./bin/spark-class org.apache.spark.deploy.worker.Worker spark://lovixs-QTK5:7077

!!注意:

最後的spark://lovixs-QTK5:7077 ,需要我們通路本地的8080端口,替換為spark為我們生成的url位址.

5,送出作業

./bin/spark-submit –master spark://lovixs-QTK5:7077 –class wordCount /home/lovixs/work/myfirstscala.jar

其中同樣要注意替換自己的url位址,和類名(wordCount),最後為jar包的位置.

六,檢查結果

生成的結果在代碼中被我存在了/home/lovixs/work/spark-2.1.1-bin-hadoop2.7/bin/helloSparkRes目錄下,大家可以在自己代碼中設定的位置找到程式輸出的結果.

使用Scala寫第一個Spark程式

這時我們就可以看到是兩個節點(master和worker)分别的輸出了!

後記:唉,說實話寫到第四條我就後悔了,字是真多,當時覺得很複雜的東西寫來簡單不少.也可能是這幾天忙着天天寫業務代碼腦子壞掉了,也可能是單純的當時被網絡折磨的,也不知道寫這麼多有沒有用,希望能有人用的到吧.

繼續閱讀