Spark架構角色及基本運行流程


1. 集群角色

  • Application:基於spark的用戶程序,包含了一個Driver program 和集群中多個Executor
  • Driver Program:運行application的main()函數並自動創建SparkContext。Driver program通過一個SparkContext對象來訪問Spark,通常用SparkContext代表Driver。
  • SparkContext: Spark的主要入口點,代表對計算集群的一個連接,是整個應用的上下文,負責與ClusterManager通信,進行資源申請、任務的分配和監控等。
  • ClusterManager:在集群上獲得資源的外部服務(spark standalone,mesos,yarm),Standalone模式:Spark原生的資源管理,由Master負責資源,YARN模式Yarn中的ResourceManager
  • Worker Node:集群中任何可運行Application代碼的節點,負責控制計算節點,啟動Executor或者Driver(Standalone模式:Worder,Yarn模式:NodeManager)
  • Executor為某個Application在worker node上執行任務的一個進程,該進程負責運行task並負責將數據存儲在內存或者硬盤上,每個application都有自己獨立的一組Executors。
  • RDD:彈性分布式數據集,是spark 的基本運算單元,通過scala集合轉化讀取數據集生成或者由其他RDD進過算子操作得到
  • Job:可以被拆分成Task並行計算的單元,一般為Spark Action觸發的一次執行作業
  • Stage:每個Job會被拆分成很多組Task,每組任務被稱為Stage,也可稱TaskSet,該屬於經常在日志中看到
  • Task:被送到executor上執行的工作單元

2. 基本運行流程

SparkContext的初始化過程中,Spark會分別創建DAGScheduler作業和TaskScheduler任務調度兩級調度模塊:

  • DAG Scheduler:根據作業(Job)構建基於Stage的DAG,並將DAG分解成Stage以TaskSets(任務組)的形式提交給任務調度模塊Task Scheduler來具體執行
  • Task Scheduler:將任務(Task)分發給Executor執行

詳細的流程為:

 

  1. Application啟動之后, 會在本地啟動一個Driver進程,用於控制整個流程(假設我們使用的Standalone模式);
  2. 初始化SparkContext構建出DAGScheduler、TaskScheduler,以SparkContext為程序運行的總入口;
  3. 在初始化TaskSechduler的時候,它會向資源管理器(Standalone中是Master)注冊Application,Master收到消息后使用資源調度算法在Spark集群的Worker上啟動Executor並進行資源的分配,最后將Executor注冊到TaskScheduler
  4. 資源管理器分配Executor資源並啟動StandaloneExecutorBackendExecutor運行情況將隨着心跳發送到資源管理器上,到這里准備工作基本完成了;
  5. 根據我們編寫的業務,如通過sc.textFile("file")加載數據源,將數據轉化為RDD;
  6. DAGScheduer  先按照Action將程序划分為一至多個job(每一個job對應一個DAG),之后DAGScheduer根據是否進行shuffer將job划分為多個Stage,每個Stage過程都是Taskset , DAG將Taskset交給TaskScheduler(由Work中的Executor去執行)
  7. Executor向SparkContext申請Task
  8. Task Scheduler將Task發放給Executor運行,同時SparkContext將應用程序代碼發放給Executor
  9. Task在Executor上運行,運行完畢釋放所有資源

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM