生活随笔
收集整理的這篇文章主要介紹了
第三章 Spark运行模式及原理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
第三章 Spark運行模式及原理
目錄
Spark運行模式概述Local模式Standalone模式Local cluster模式Mesos模式YARN standalone/YARN cluster模式YARN client模式各種模式的實現細節比較Spark1.0版本之后的變化小結
注:學習《Spark大數據處理技術》筆記
1. Spark運行模式概述
1. Spark運行模式列表
Spark應用程序的運行模式取決于傳遞給SparkContext的MASTER環境變量的值,個別模式還需要依賴輔助的程序接口來配合使用,目前所支持的MASTER環境變量由特定的字符串或URL所組成 Local[N]:本地模式,使用N個線程Local cluster[worker, core, Memory]:偽分布模式,可以配置所需要啟動的模擬工作,以及每個工作節點管理的CPU數量和內存尺寸Spark://hostname:port: Standalone 模式,需要部署Spark到相關節點,URL為Spark Master主機地址和端口Mesos://hostname:port:Mesos模擬,需要部署Spark和Mesos到相關節點,URL為Mesos主機地址和端口YARN standalone/YARN cluster:YARN 模式一,主程序邏輯和任務都運行在YARN集群中YARN client:YARN 模式二,主程序運行在本地,具體任務運行在YARN集群中
2. Spark基本工作流程
多個運行模式從總體上來說,都基于一個相似的工作流程。從根本上都是將Spark的應用分為任務調度和任務執行兩個部分
1. 分布式模式下,Spark的各個調度和執行模塊大致架構圖
2. 對于本地模式來說,其內部程序邏輯結構也是類似的,只是其中的部分模塊有所簡化,例如集群管理模塊簡化為進程內部的線程池從圖3-1可知,所有的Spark應用程序都離不開SparkContext和Executor兩部分
1. Executor負責執行任務,運行Executor的機器稱為Worker節點
2. SparkContext由用戶程序啟動,通過資源調度模塊和Executor通信
3. SparkContext和Executor這兩部分的核心代碼實現在各個運行模式中都是公用的,在它們之上,根據運行部署模式的不同,包裝了不同調度模塊以及相關的適配代碼具體來說,以SparkContext為程序運行的總入口,在SparkContext的初始化過程中,Spark會分別創建DAGScheduler作業調度和TaskScheduler任務調度兩級調度模塊
1. 其中作業調度模塊是基于任務階段的高層調度模塊,它為每個Spark作業計算具有依賴關系的多個調度階段(通常根據shuffle來劃分),然后為每個階段構建出一組具體的任務(通常會考慮數據的本地性等),然后以TaskSets(任務組)的形式提交給任務調度模塊來具體執行。
2. 而任務調度模塊則負責具體啟動任務、監控和匯報任務運行情況作業調度模塊和具體的部署運行模式無關,在各種運行模式下邏輯相同。不同的運行模式的區別主要體現在任務調度模塊。不同的部署和運行模式,根據底層資源調度方式的不同,各自實現了自己特定的任務調度模塊,用來將任務實際調度給對應的計算資源
3. 相關基本類
TaskScheduler/SchedulerBackend
為了抽象出一個公共的接口供DAGScheduler作業調度模塊使用,所有的這些運行模式實現的任務調度模塊都是基于這兩個接口的(Trait):TaskScheduler(見程序3-1)及SchedulerBackend(見程序3-2) TaskScheduler的實現主要用于于DAGScheduler交互,負責任務的具體調度和運行,其核心接口是submitTasks和canceTasks
SchedulerBackend的實現是與底層資源調度系統交互(如Mesos/Yarn),配合TaskScheduler實現具體任務執行所需的資源分配,核心接口是receiveOffers
這兩者之間的實際交互過程取決于具體的調度模式,理論上這兩者的實現是成對匹配工作的,之所以拆分成兩部分,是有利于相似的調度模式共享代碼功能模塊 TaskSchedulerImpl
TaskSchedulerImpl實現了TaskScheduler接口,提供了大多數本地和分布式運行調度模式的任務調度接口
此外,它還實現了resourceOffers和statusUpdate這兩個接口供Backend調用,用于提供調度資源和更新任務狀態
另外,在提交任務和更新狀態等階段,TaskSchedulerImpl都會調用Backend的receiveOffers函數,用于發起一次任務資源調度請求 Executor
實際任務的運行,最終都由Executor類來執行,Executor對每一個任務創建一個TaskRunner類,交給線程池運行
運行結果通過ExecutorBackend接口返回
圖3-2列出了各種運行模式下相關類的關系圖
待續…
總結
以上是生活随笔為你收集整理的第三章 Spark运行模式及原理的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。