2 1 Spark執行架構

2021-08-07 04:41:30 字數 2842 閱讀 7186

1、 spark執行架構

1.1 術語定義1.2 spark執行基本流程1.2.1 dagscheduler

dagscheduler把乙個spark作業轉換成stage的dag(directed acyclic graph有向無環圖),根據rdd和stage之間的關係找出開銷最小的排程方法,然後把stage以taskset的形式提交給taskscheduler,下圖展示了dagscheduler的作用:

dagscheduler決定了執行task的理想位置,並把這些資訊傳遞給下層的taskscheduler。此外,dagscheduler還處理由於shuffle資料丟失導致的失敗,這有可能需要重新提交執行之前的stage(非shuffle資料丟失導致的task失敗由taskscheduler處理)。

taskscheduler維護所有taskset,當executor向driver傳送心跳時,taskscheduler會根據其資源剩餘情況分配相應的task。另外taskscheduler還維護著所有task的執行狀態,重試失敗的task。下圖展示了taskscheduler的作用:

在不同執行模式中任務排程器具體為:

l spark on standalone模式為taskscheduler;

l yarn-client模式為yarnclientclusterscheduler

l yarn-cluster模式為yarnclusterscheduler

1.3 rdd執行原理

那麼 rdd在spark架構中是如何執行的呢?總高層次來看,主要分為三步:

1.建立 rdd 物件

2.dagscheduler模組介入運算,計算rdd之間的依賴關係。rdd之間的依賴關係就形成了dag

3.每乙個job被分為多個stage,劃分stage的乙個主要依據是當前計算因子的輸入是否是確定的,如果是則將其分在同乙個stage,避免多個stage之間的訊息傳遞開銷。

以下面乙個按 a-z 首字母分類,查詢相同首字母下不同姓名總個數的例子來看一下 rdd 是如何執行起來的。

步驟 1 :建立 rdd 上面的例子除去最後乙個 collect 是個動作,不會建立 rdd 之外,前面四個轉換都會建立出新的 rdd 。因此第一步就是建立好所有 rdd( 內部的五項資訊 ) 。

步驟 2 :建立執行計畫 spark 會盡可能地管道化,並基於是否要重新組織資料來劃分 階段 (stage) ,例如本例中的 groupby() 轉換就會將整個執行計畫劃分成兩階段執行。最終會產生乙個 dag(directed acyclic graph ,有向無環圖 ) 作為邏輯執行計畫。

步驟 3 :排程任務 將各階段劃分成不同的 任務 (task) ,每個任務都是資料和計算的合體。在進行下一階段前,當前階段的所有任務都要執行完成。因為下一階段的第乙個轉換一定是重新組織資料的,所以必須等當前階段所有結果資料都計算出來了才能繼續。

假設本例中的 hdfs://names 下有四個檔案塊,那麼 hadooprdd 中 partitions 就會有四個分割槽對應這四個塊資料,同時 preferedlocations 會指明這四個塊的最佳位置。現在,就可以建立出四個任務,並排程到合適的集群結點上。

2、spark在不同集群中的執行架構

spark注重建立良好的生態系統,它不僅支援多種外部檔案儲存系統,提供了多種多樣的集群執行模式。部署在單台機器上時,既可以用本地(local)模式執行,也可以使用偽分布式模式來執行;當以分布式集群部署的時候,可以根據自己集群的實際情況選擇standalone模式(spark自帶的模式)、yarn-client模式或者yarn-cluster模式。spark的各種執行模式雖然在啟動方式、執行位置、排程策略上各有不同,但它們的目的基本都是一致的,就是在合適的位置安全可靠的根據使用者的配置和job的需要執行和管理task。

2.1 spark on standalone執行過程2.2 spark on yarn執行過程2.2.1 yarn框架流程

任何框架與yarn的結合,都必須遵循yarn的開發模式。在分析spark on yarn的實現細節之前,有必要先分析一下yarn框架的一些基本原理。

yarn框架的基本執行流程圖為:

2.2.3 yarn-cluster2.2.4 yarn-client 與 yarn-cluster 區別

Spark執行架構

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

Spark執行架構

在driver program中新建sparkcontext 包含sparkcontext的程式稱為driver program 2 sparkcontext向資源管理器申請執行executor資源,並啟動standaloneexecutorbackend,executor向sparkcontent...

Spark執行架構

spark執行架構要背下來 driver program 執行main函式的程序,並且建立了乙個sparkcontext cluster manager 乙個從cluster申請資源的外部服務 deploy mode 區分driver程序跑在 client模式下,driver跑在本地 cluster...