Spark開發 spark執行原理和RDD

2021-08-08 04:45:19 字數 3181 閱讀 4239

核心

1、spark執行原理

2、rdd

1、spark執行原理

spark應用程式基本概念spark基本工作流程spark 應用程式程式設計模型

1、driver program (sparkcontext)

1、1匯入spark的類和隱式轉換

1、2構建spark應用程式的執行環境 sparkconf

1、3初始化sparkcontext

1、4關閉sparkcontext

1、5spark-shell在啟動的時候會自動構建sparkcontext名稱為sc

2、executor(rdd操作)

輸入 base–>rdd

transformation rdd–>rdd

action rdd—>driver or base

快取 persist or cache

2、rdd

rdd 彈性分布式資料集(resilient distributed datasets):即乙個rdd代表乙個被分割槽的唯讀資料集

rdd的建立只有3種方式rdd彈性特點

1、自動的進行記憶體和磁碟資料儲存的切換

2、自動血緣的高效容錯

3、task如果失敗會自動特點次數的容錯

4、stage失敗會自動特定次數的重試,只會重試失敗的stage

快取點:

1、計算特別耗時

2、計算鏈條很長

3、shuffle之後

4、checkpoint之前

建立操作(creation operation) rdd的初始建立都是由sparkcontext來負責的,將記憶體中的集合或者外部檔案系統作為輸入源

轉換操作(transformation operation) 將乙個rdd通過一定的操作變換成另乙個rdd,比如file這個rdd就是通過filter操作變換成filterrdd的,所以filter就是乙個轉換操作

控制操作(control operation) 對rdd進行持久化,可以讓rdd儲存在磁碟或者記憶體中,以便後續重複使用。比如cache介面預設將filterrdd快取在記憶體中

行動操作(action operation) 由於spark是惰性計算的,所以對於任何rdd進行行動操作,都會觸發spark作業的執行,從而產生最終的結果,例如,我們隊filterrdd進行的count操作就是

乙個行動操作,spark中的行動操作基本分為2類,一類的操作結果變成scala集合或者變數,另一類就是將rdd儲存到外部檔案或者資料庫系統中

rdd與操作之間的關係圖

rdd 操作例項

scala> val data=sc.textfile("/input/passwd")

17/09/13

22:20:39 info storage.memorystore: block broadcast_0 stored as values in memory (estimated size 229.9 kb, free 2.7 gb)

17/09/13

22:20:39 info storage.memorystore: block broadcast_0_piece0 stored as

bytes

in memory (estimated size 19.5 kb, free 2.7 gb)

17/09/13

22:20:39 info storage.blockmanagerinfo: added broadcast_0_piece0 in memory on

192.168

.18.140:55227 (size: 19

.5kb, free: 2

.7gb)

17/09/13

22:20:39 info spark.sparkcontext: created broadcast 0

from textfile at

:27:27

scala> data.todebugstring

17/09/13

22:20:50 info mapred.fileinputformat: total input paths to

process : 1

res0: string =

:27

| /input/passwd hadooprdd[0] at textfile at

:27 //todebugstring方法會列印出rdd的家族關係

//可以看到textfile方法會生成兩個rdd,分別是hadooprdd

scala> val flatted=data.flatmap(_.split(":"))

:29scala> val maped=flatted.map(word=>(word,1))

:31scala> val reduced=maped.reducebykey(_+_)

reduced: org.apache.spark.rdd.rdd[(string, int)] = shuffledrdd[4] at reducebykey at

:33scala> reduced.todebugstring

res1: string =

(2) shuffledrdd[4] at reducebykey at

:33

:31

:29

:27

| /input/passwd hadooprdd[0] at textfile at

:27

從spark ui上我們可以看到在做reducebykey的時候spark做了stage的劃分,其實reducebykey產生了乙個shuffledrdd

20 Spark核心程式設計之Spark架構原理

driver driver 程序 我們編寫的spark程式就在driver上,由driver程序執行 master master是個程序,主要是負責資源的排程和分配,還有集群的監控等等職責 worker worker是個程序,主要負責有兩個,乙個是用自己的記憶體,儲存rdd的某個或某些partiti...

Spark執行架構

job 包含多個task組成的平行計算,乙個dag觸發的作業,由action運算元觸發,在sparkcontext中通過runjob方法向spark提交job stage job的排程單位,每個job會根據rdd的寬依賴關係被切分成很多stage,每個stage中包含一組相同的task,這組task...

spark執行模式

spark的執行模式多種多樣,靈活多變,部署在單機上時,既可以用本地模式執行,也可以用偽分布式模式執行 而當以分布式集群的方式部署時,底層的資源排程既可以依賴於外部的資源排程框架,也可以使用spark內建的standalone模式。對於外部資源排程框架的支援,目前主要包括mesos模式和hadoop...