Spark學習筆記(二)—— Local模式


Spark 的運行模式有 Local(也稱單節點模式),Standalone(集群模式),Spark on Yarn(運行在Yarn上),Mesos以及K8s等常用模式,本文介紹第一種模式。

1、Local模式

Local模式就是運行在一台計算機上的模式, 也稱單節點模式 。Local 模式是最簡單的一種Spark運行方式,它采用單節點多線程(CPU)方式運行, 通常就是用於在本機學習或者測試使用的,對新手比較友好。它可以通過以下的方式設置Master:

  • local:所有的計算都運行在一個線程中,沒有任何的並行計算。通常我們在學習和測試的時候都是使用這種模式;

  • local[K]:這種方式可以指定用幾個線程來計算,比如local[4],就是指定4個Worker線程。通常我們的CPU有幾個Core,就指定介個線程,最大化的利用CPU的計算能力;

  • local[*]:這種模式直接幫你按照CPU最多Core來設置線程數量了。

2、安裝使用

說了那么多,還沒見真章。那么接下來開始安裝使用一下~~

1)上傳並且解壓Spark安裝包

我使用的是spark-2.1.1-bin-hadoop2.7.tgz

[simon@hadoop102 sorfware]$ tar -zxvf spark-2.1.1-bin-hadoop2.7.tgz -C /opt/module/

[simon@hadoop102 module]$ mv spark-2.1.1-bin-hadoop2.7 spark

解壓完成之后看到目錄還是非常清晰的:

2)蒙特卡羅法求PI

這是一個官方小案例,看代碼

[simon@hadoop102 spark]$ bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--executor-memory 1G \
--total-executor-cores 2 \
./examples/jars/spark-examples_2.11-2.1.1.jar \
100    

解析一下上邊的語法:

  • --master:指定Master的地址,默認為Local
  • --class: 你的應用的啟動類 (如 org.apache.spark.examples.SparkPi)
  • --deploy-mode: 是否發布你的驅動到worker節點(cluster) 或者作為一個本地客戶端 (client) (default: client)*
  • --conf: 任意的Spark配置屬性, 格式key=value. 如果值包含空格,可以加引號“key=value”
  • application-jar: 打包好的應用jar,包含依賴. 這個URL在集群中全局可見。 比如hdfs:// 共享存儲系統, 如果是 file:// path, 那么所有的節點的path都包含同樣的jar
  • application-arguments: 傳給main()方法的參數
  • --executor-memory 1G :指定每個executor可用內存為1G
  • --total-executor-cores 2 :指定每個executor使用的cup核數為2個

這就是迭代100次的運算結果,運行速度還是非常快的:

再來一個小的WordCount的小案例演示,同樣也是很簡單的。

1)創建待輸入的文件

[simon@hadoop102 spark]$ mkdir input

#創建a.txt和b.txt,填寫如下內容:
hello simon
hello spark

我創建的過程和編寫的文件內容如下:

2)啟動spark-shell

[simon@hadoop102 spark]$ bin/spark-shell
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
....
#會打印一堆的啟動日志信息
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 2.1.1
      /_/
         
Using Scala version 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_144)
Type in expressions to have them evaluated.
Type :help for more information.

scala> 

在啟動日志中可以看到這么三行:

解釋一下這三個東西:

  • Web UI : 可以在web頁面看到Spark集群的信息;
  • Spark context ..sc:可以理解為sc是Spark Core的程序入口;
  • Spark session ..spark:可以理解為spark是Spark SQL程序的入口。

之后會用到,到時候再詳細解釋~~~

再起一個窗口,執行jps可以看到啟動了SparkSubmit進程,這樣就算是啟動成功了~~

3)運行WordCount程序

sc.textFile("./input").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect

看運行結果,nice ~~

后邊我們會解釋這些代碼的含義。

可登錄hadoop102:4040查看程序運行,整個流程還是非常清晰的:

3、分析WordCount流程

直接看個圖吧:

那我們回過頭來解釋一下代碼吧,有scala語言基礎的話,看起來還不是太難:

  • textFile("input"):讀取本地文件input文件夾數據;
  • flatMap(_.split(" ")):壓平操作,按照空格分割符將一行數據映射成一個個單詞;
  • map((__,1)):對每一個元素操作,將單詞映射為元組;
  • reduceByKey(+):按照key將值進行聚合,相加;
  • collect:將數據收集到Driver端展示。

我這樣語言組織起來比較費勁,先留個坑,過段時間回過頭來再補充流程分析。

文件是怎么被讀出、被分割、被統計展示的呢?還是看圖吧,等我組織好語言回來補充:


參考資料:

[1]李海波. 大數據技術之Spark



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM