Spark工作機制
主要模塊
- 調度與任務分配
- I/O模塊
- 通信控制模塊
- 容錯模塊
- Shuffle模塊
調度層次
- 應用
- 作業
- Stage
- Task
調度算法
- FIFO
- FAIR(公平調度)
Spark應用執行機制
總覽
Spark應用提交后經歷了一系列的轉換,最后成為Task在每個節點上執行.
- RDD的Action算子觸發Job的提交,提交到Spark中的Job生成RDD DAG
- 由DAGScheduler轉化為Stage Dage
- 每個Stage中產生相應的Task集合
- TaskScheduler將任務分發到Executor執行
每個任務對應相應的一個數據塊,使用用戶定義的函數處理數據塊.
Spark實現了分布式計算和任務處理,並實現了任務的分發,跟蹤,執行等工作.最終聚合結果,完成Spark應用的計算.
對RDD的塊管理通過BlockManger完成.BlockManager將數據抽象為數據塊,在內存或者磁盤進行存儲,如果數據不在本節點,則還可以通過遠端節點復制到本機進行計算.
Spark應用
執行模式
- Local
- Standalone
- YARN
- Mesos
- Cluster模式
- Client模式
應用的基本組件
- Application:用戶自定義的Spark程序,用戶提交后,Spark為App分配資源,將程序轉換並執行
- Driver Program:運行Application的main()創建並創建SparkContext
- RDD Graph:RDD是Spark的核心結構,當RDD遇到Action算子時,將之前的所有算子形成一個DAG,也就是RDD Graph.再在Spark中轉化為Job,提交到集群執行.一個App中可以包含多個Job.
- Job:一個RDD Graph觸發的作業,往往由Spark Action算子觸發.在SparkContext中通過runJob方法向Saprk提交Job.
- Stage:每個Job會根據RDD的寬依賴關系唄切分很多Stage,每個Stage中包含一組相同的Task,這一組Task也叫TaskSet.
- Task:一個分區對應一個Task,Task執行RDD中對應Stage中包含的算子.Task被封裝好后放入Executor的線程池中執行.