1. Spark 程序在運行的時候分為 Driver 和 Executor 兩部分;
2. Spark 的程序編寫是基於 SparkContext 的,具體來說包含兩方面:
a) Spark 編程的核心基礎 RDD, 是由 SparkContext 來最初創建
b) Spark 程序的調度優化也是基於 SparkContext
3. Spark 程序的注冊是通過 SparkContext 實例化時候生成的對象來完成的(其實是 SchedulerBackend 來注冊程序的)
4. Spark 程序運行的時候要通過 ClusterManager 獲得具體的計算資源,計算資源的獲取也是通過 SparkContext 產生的對象來申請的(其實是 SchedulerBackend 來獲取計算資源的)。
5. SparkContext 崩潰或者結束的是候整個 Spark 程序也結束了。
6. SparkContext 構建的項級三大核心對象:DAGScheduler 、TaskScheduler、SchedulerBackend。其中:
a) DAGScheduler 是面向 Job 的 Stage 的高層調度器
b) TaskScheduler 是一個接口,根據具體地 Cluster Manager 的不同會有不同的實現,Standalone 模式下具體的實現是 TaskSchedulerImpl ;
c) SchedulerBacken 是一個接口;根據具體的 Cluster Manager 的不同會有不同的實現,Standalone 模式下具體的實現是 SparkDeploySchedulerBackend (它是被TaskSchedulerImpl 管理的); 其核心功能是:
(1)負責與 Master 鏈接注冊當前程序;
(2)接收集群中為當前應用程序而分配的計算資源 Executor 的注冊並管理 Executors;
(3)負責發送 Task 到具體的 Executor 執行。
從整個程序運行的角度來講,SparkContext 包含四大核心對象:DAGScheduler 、TaskScheduler、SchedulerBackend、MapOutputTrackerMaster
大體的流程: