您好,登錄后才能下訂單哦!
本篇內容主要講解“Spark的核心原理及架構”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Spark的核心原理及架構”吧!
RDD(Resilient Distributed Datasets),彈性分布式數據集,它是對分布式數據集的一種內存抽象,通過受限的共享內存方式來提供容錯性,同時這種內存模型使得計算比傳統的數據流模型要高效。RDD具有5個重要的特性,如下圖所示:
1.一組分區,數據集的基本組成單位。
2.計算每一個數據分區的函數。
3.對parent RDD的依賴,這個依賴描述了RDD之間的lineage(血統)。
4.可選,對于鍵值對RDD,有一個Partitioner(通常是HashPartitioner,RangePartitioner)。
5.可選,一組Preferred location信息(例如,HDFS文件的Block所在location信息)。
用戶在提交任務給Spark處理時,以下兩個參數共同決定了Spark的運行方式。 · –master MASTER_URL :決定了Spark任務提交給哪種集群處理。 · –deploy-mode DEPLOY_MODE:決定了Driver的運行方式,可選值為Client或者Cluster。
Spark 運行架構的特點
每個Application獲取專屬的executor進程,該進程在Application期間一直駐留,并以多線程方式運行Tasks。這種Application隔離機制有其優勢的,無論是從調度角度看(每個Driver調度它自己的任務),還是從運行角度看(來自不同Application的Task運行在不同的JVM中)。當然,這也意味著Spark Application不能跨應用程序共享數據,除非將數據寫入到外部存儲系統。
Spark與資源管理器無關,只要能夠獲取Executor進程,并能夠保持相互通信就可以了。
提交SparkContext的Client應該靠近Worker節點(運行Executor的節點),最好是在同一個機架里,因為Spark Application運行過程中SparkContext和Executor之間有大量的信息交換;如果想在遠程集群中運行,最好使用RPC將SparkContext提交給集群,不要遠離Worker運行SparkContext。
專屬名稱:
Application:每一個Spark程序,稱之為一個Application。
Driver:每個Spark程序運行一個Driver進程,用來協調,統計任務進度。
Worker:每個Spark程序運行多個Worker進程,可以運行在一個節點或多個節點上,包含多個Executor子進程。
Executor:每個Spark程序運行多個Executor進程,具體承擔計算任務。
Standalone 運行模式
Spark Standalone模式,即獨立模式,自帶完整的服務,可單獨部署到一個集群中,無需依賴其他資源管理系統(資源管理+資源調度)。在該模式下,用戶可以通過手動啟動Master和Worker來啟動一個獨立的集群。其中,Master充當了資源管理的角色,Workder充當了計算節點的角色。在該模式下,Spark Driver程序在客戶端Client運行,而Executor則在Worker節點上運行。
Standalone 組件分析 整個集群分為Master節點和Worker節點,其中Driver程序運行在客戶端。
.Master節點負責為任務分配Worker節點上的計算資源,兩者會通過相互通信來同步資源狀態,見途中紅色雙向箭頭。
.客戶端啟動任務后會運行Driver程序,Driver程序中會完成SparkContext對象的初始化,并向Master進行注冊。
.每個Workder節點上會存在一個或者多個ExecutorBackend進程。每個進程包含一個Executor對象,該對象持有一個線程池,每個線程池可以執行一個任務task。ExecutorBackend進程還負責跟客戶端節點上的Driver程序進行通信,上報任務狀態。
Spark Standalone任務運行過程
上面的過程反映了Spark在standalone模式下,整體上客戶端、Master和Workder節點之間的交互。對于一個任務的具體運行過程需要更細致的分解,分解運行過程見圖中的小字。
1.用戶通過bin/spark-submit部署工具或者bin/spark-class啟動應用程序的Driver進程,Driver進程會初始化SparkContext對象,并向Master節點進行注冊。
2.Master節點接受Driver程序的注冊,檢查它所管理的Worker節點,為該Driver程序分配需要的計算資源Executor。Worker節點完成Executor的分配后,向Master報告Executor的狀態。
3.Worker節點上的ExecutorBackend進程啟動后,向Driver進程注冊。
4.Driver進程內部通過DAG Schaduler,Stage Schaduler,Task Schaduler等過程完成任務的劃分后,向Worker節點上的ExecutorBackend分配TASK。
5.ExecutorBackend進行TASK計算,并向Driver報告TASK狀態,直至結束。
6.Driver進程在所有TASK都處理完成后,向Master注銷。
Spark Standalone 模式總結
Spark能夠以standalone模式運行,這是Spark自身提供的運行模式,用戶可以通過手動啟動master和worker進程來啟動一個獨立的集群,也可以在一臺機器上運行這些守護進程進行測試。standalone模式可以用在生產環境,它有效的降低了用戶學習、測試Spark框架的成本。
standalone模式目前只支持跨應用程序的簡單FIFO調度。然而,為了允許多個并發用戶,你可以控制每個應用使用的資源的最大數。默認情況下,它會請求使用集群的全部CPU內核。
缺省情況下,standalone任務調度允許worker的失敗(在這種情況下它可以將失敗的任務轉移給其他的worker)。但是,調度器使用master來做調度,這會產生一個單點問題:如果master崩潰,新的應用不會被創建。為了解決這個問題,可以zookeeper的選舉機制在集群中啟動多個master,也可以使用本地文件實現單節點恢復。
Spark Cluster模式任務運行過程
1.用戶通過bin/spark-submit部署工具或者bin/spark-class向Yarn集群提交應用程序。
2.Yarn集群的Resource Manager為提交的應用程序選擇一個Node Manager節點并分配第一個container,并在該節點的container上啟動SparkContext對象。
3.SparkContext對象向Yarn集群的Resource Manager申請資源以運行Executor。
.Yarn集群的Resource Manager分配container給SparkContext對象,SparkContext和相關的Node Manager通訊,在獲得的container上啟動ExecutorBackend守護進程,ExecutorBackend啟動后開始向SparkContext注冊并申請Task。
5.SparkContext分配Task給ExecutorBackend執行。
6.ExecutorBackend開始執行Task,并及時向SparkContext匯報運行狀況。
7.Task運行完畢,SparkContext歸還資源給Node Manager,并注銷退。
Spark Cluster 模式總結
Spark能夠以集群的方式運行,這里的可選集群有Yarn和Mesos。在集群模式下,Spark的Driver程序可能被調度到任何一個節點,任務執行完成后,集群分配的資源將被回收。
到此,相信大家對“Spark的核心原理及架構”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。