Spark學習筆記(一)--Spark架構

Spark架構採用了分佈式計算中的Master-Slave模型。Master是對應集羣中的含有Master進程的節點,Slave是集羣中含有Worker進程的節點。Master作爲整個集羣的控制器,負責整個集羣的正常運行;Worker相當於是計算節點,接收主節點命令與進行狀態彙報;Executor負責任務的執行;Cluster作爲用戶的客戶端負責提交應用,Driver負責控制一個應用的執行。具體如下圖


Spark架構圖

Spark集羣部署後,需要在主節點和從節點分別啓動Master進程和Woker進程,對整個集羣進行控制。在一個Spark應用的執行過程中,Driver和Worker是兩個重要角色。Driver程序是應用邏輯執行的起點,負責作業的調度,即Task任務的分發,而多個Worker用來管理計算節點和創建Executor並行處理任務。在執行階段,Driver會將Task和Task所依賴的
file和jar序列化後傳遞給對應的Worker機器,同時Exucutor對相應數據分區的任務進行處理。

下面詳細介紹Spark的架構中的基本組件。

  • ClusterManager:在Standalone模式中即爲Master(主節點),控制整個集羣,監控Worker。在YARN模式中爲資源管理器。

  • Worker:從節點,負責控制計算節點,啓動Executor或Driver。在YARN模式中爲NodeManager,負責計算節點的控制。

-Driver :運行Application的main()函數並創建SparkContext

-Executor:執行器,在worker node上執行任務的組件、用於啓動線程池運行任務。每個Application擁有獨立的一組Executors。

-SparkContext:整個應用的上下文,控制應用的生命週期。

-RDD:Spark的基本計算單元,一組RDD可形成執行的有向五環RDD Graph

-DAG Scheduler:根據作業(Job)構建基於Stage的DAG,並提交Stage給TaskScheduler

-TaskScheduler:將任務(Task)分發給Executor執行

-SparkEnv:線程級別的上下文,存儲運行時的重要組件的引用。
SparkEnv內創建幷包含如下的一些重要組件的引用。

-MapOutPutTracker:負責Shuffle元信息的存儲。

-BroadcastManager:負責廣播變量的控制與元信息的存儲。

-BlockManager:負責儲存管理、創建和查找塊。

-MetricsSystem:監控運行時性能指標信息。

-SparkConf:負責存儲配置信息。

Spark整體流程爲:Client提交應用,Master找到一個Worker啓動Driver,Driver向Master或者資源管理器申請資源,之後將應用轉化爲RDD Graph,再由DAGScheduler將RDD Graph轉化爲Stage的有向無環圖提交給TaskScheduler,由TaskScheduler提交任務給Executor執行。在任務執行過程中,其他組件協同工作,確保整個應用順利進行。

Spark運行邏輯

在Spark應用中,整個執行流程在邏輯上會形成有向無環圖(DAG)。
Action算子觸發之後,將所有累積的算子形成一個有向無環圖,然後由調度器調度該圖上的任務進行運算。Spark的調度方式與MapReduce有所不同。Spark根據RDD之間不同的依賴關係切分成不同的階段(Stage),一個階段包含一系列函數執行流水線。圖中的A、B、C、D、E、F分別代表不同的RDD,RDD的方框代表分區。數據從HDFS輸入Spark,形成RDD A 和 RDD C,RDD C上執行map操作,轉換爲RDD D

發佈了107 篇原創文章 · 獲贊 147 · 訪問量 51萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章