spark的架構

在分佈式環境下,Spark 集羣採用的是master/slave結構。Master是對應集羣中的含有master進程的節點,slave是集羣中含有worker進程的節點。Master作爲整個集羣的控制器,負責整個集羣的正常運行;worker相當於是計算節點,接收主節點命令與進行狀態彙報,client作爲用戶的客戶端負責提交應用
在一個 Spark集羣中,有一個節點負責中央協調,調度各個分佈式工作節點。這個中央協調節點被稱爲驅動器(Driver)節點,與之對應的工作節點被稱爲執行器(executor)節點。驅動器節點可以和大量的執行器節點進行通信,它們也都作爲獨立的 Java 進程運行。驅動器節點和所有的執行器節點一起被稱爲一個 Spark 應用(application)。其中executor負責任務的執行;driver負責控制一個應用的執行。
Spark 應用通過一個叫作集羣管理器(Cluster Manager)的外部服務在集羣中的機器上啓動。Spark 自帶的集羣管理器被稱爲獨立集羣管理器。Spark 也能運行在 Hadoop YARN 和Apache Mesos 這兩大開源集羣管理器上。
Spark集羣部署後,需要在主節點和從節點分別啓動master進程和worker進程,對整個集羣進行控制。在一個spark應用的執行過程中,driver和worker是兩個重要角色。Driver程序是應用邏輯執行的起點,負責作業的調度,即task任務的分支,而多個worker用來管理計算節點和創建executor並行處理任務。在執行階段,driver會將task和task所依賴的file和jar包序列化後傳遞給對應的worker機器,同時executor對相應數據分區的任務進行處理。

具體如下圖所示:


各個組件的介紹如下:
1)Clustermanager:在standalone模式中即爲master(主節點),控制整個集羣,監控worker。在yarn或者mesos模式中爲資源管理器。
2)Worker:從節點,負責控制計算節點,啓動executor或driver。在yarn模式中爲nodemanager,負責計算節點的控制。
3)Driver:運行application的main()函數並創建sparkContext.
4)Executor:執行器,在worker node上執行任務的組件、用於啓動線程池運行任務。每個application擁有獨立的一組executors。
5)sparkContext:整個應用的上下文,控制應用的生命週期。
6)RDD DAG:spark的基本計算單元是RDD,一組RDD可形成執行的有向無環圖RDD DAG。
7)DAG Scheduler:根據作業(Job)構建基於stage的DAG,並提交stage給taskscheduler。
8)Taskscheduler:將任務(Task)分發給executor執行。
9)sparkEnv:線程級別的上下文,存儲運行時的重要組件的引用。
sparkEnv內創建幷包含如下一些重要組件的引用:
10)Mapoutputtracker:負責shuffle元信息的存儲。
11)BroadcastManager:負責廣播變量的控制與元信息的存儲
12)Blockmanager:負責存儲、管理、創建和查找塊。
13)metricsSystem:負責運行時性能指標信息。
14)sparkConf;負責存儲配置信息。

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章