Spark MLlib 入門學習筆記 - 程式設計環境配置

hjh00發表於2017-05-18

配置windows下Spark MLlib的程式設計環境,實現在windows下用scala開發程式,用小資料集測試驗證程式的正確性。少做修改,或者不做修改,然後打包成jar檔案,用spark-submit提交到spark叢集進行測試。假設已 安裝好jdk、scala、IntelliJ IDEA和scala外掛。

1. 安裝hadoop、spark和hadoop2.6_Win_x64-master

下載 hadoop-2.6.0.tar.gz和spark-1.6.0-bin-hadoop2.6,從github下載hadoop2.6_Win_x64-master.zip(https://github.com/sdravida/hadoop2.6_Win_x64)。建立目錄e:\spark,1)將三個檔案解壓縮到e:\spark目錄下,2)將E:\spark\hadoop2.6_Win_x64-master\bin的檔案拷貝到E:\spark\hadoop260\bin下面,3)將spark-assembly-1.6.0-hadoop2.6.0.jar檔案拷貝到C:\Program Files (x86)\JetBrains\IntelliJ IDEA 2016.2.5\lib目錄下。

2. 配置spark編譯環境

啟動idea建立scala工程



2. 新增spark-assembly-1.6.0-hadoop2.6.0.jar依賴包

 點選File主選單的Project Structure子選單,彈出配置介面後選擇Libraries,再點"+"號彈出Select Library Files介面,完成選擇後,點OK就可以了。


在SparkDiscover目錄下建立data目錄,並在這個目錄下建一個wordcount.txt檔案,用作測試。在src目錄下建立兩級子目錄main/scala作為原始碼存放目錄,然後建立一個名稱為basic的package目錄和WordCount原始檔。


package basic

/**
  * Created by Oliver on 2017/5/13.
  */
import org.apache.spark.{SparkConf, SparkContext}

// "local"
// "E:/MyProject/SparkDiscover/data/wordcount.txt"

object WordCount {
  def main(args: Array[String]){
    val conf = new SparkConf().setMaster(args(0)).setAppName("WordCount")
    val sc = new SparkContext(conf)
    val data = sc.textFile(args(1))
    data.flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect().foreach(println)

  }
}

程式中用了兩個引數,引數1:提交到本地還是叢集,引數2:檔名(本地或者是hdfs),在本地windows 下的執行配置。程式很簡單,建立定義、建立上下文、讀資料檔案、呼叫flatMap進行處理(空格分割、map計數、reduce將計數相加,最後逐行列印輸出)。


執行結果


打包輸出,選擇選單File/Project Structure彈出介面後選擇Artificts,點選"+" 如下圖進行選擇,再依次點apply和ok。


點完以後發現,它把所有的包多新增進去了,時間上不需要這麼多。把不需要的包刪除,結果如下圖所示。


build jar包


3. 在spark叢集下執行

從out/artifacts/SparkDiscover_jar目錄下拷貝SparkDiscover.jar檔案到spark叢集上,執行一下指令碼進行測試。

spark-submit --master spark://d-hdp-01:7077 \
--class basic.WordCount \
--executor-memory 1g \
/home/hadoop/_testing/SparkDiscover.jar \
spark://d-hdp-01:7077 \
hdfs://d-hdp-01:9000/user/hadoop.txt  > result.log

列印輸出被重定向到result.log檔案中。執行結果如下。


從介面上可以看到提交的任務,提交兩次,介面上也顯示了兩次。



相關文章