Spark 程序在运行的时候分为 Driver 和 Executor 两部分
Spark 程序编写是基于 SparkContext 的,具体来说包含两方面
Spark 编程的核心 基础-RDD 是由 SparkContext 来最初创建的(第一个RDD一定是由 SparkContext 来创建的)
Spark 程序的调度优化也是基于 SparkContext,首先进行调度优化。
Spark 程序的注册时通过 SparkContext 实例化时候生产的对象来完成的(其实是 SchedulerBackend 来注册程序)
Spark 程序在运行的时候要通过 Cluster Manager 获取具体的计算资源,计算资源获取也是通过 SparkContext 产生的对象来申请的(其实是 SchedulerBackend 来获取计算资源的)
SparkContext 崩溃或者结束的时候整个 Spark 程序也结束啦!
[下图是 SparkContext 在创建核心对象后的流程图]
- SparkContext 構建的頂級三大核心:DAGScheduler,TaskScheduler,SchedulerBackend,其中:
- DAGScheduler 是面向 Job 的 Stage 的高層調度器;
- TaskScheduler 是一個接口,是低層調度器,根據具體的 ClusterManager 的不同會有不同的實現,Standalone 模式下具體的實現 TaskSchedulerImpl;
- SchedulerBackend 是一個接口,根據具體的 ClusterManager 的不同會有不同的實現,Standalone 模式下具體的實現是SparkDeploySchedulerBackend
從整個程序運行的角度來講,SparkContext 包含四大核心對象:DAGScheduler,TaskScheduler,SchedulerBackend,MapOutputTrackerMaster
SparkDeploySchedulerBackend 有三大核心功能:
- 負責與 Master 連接注冊當前程序 RegisterWithMaster
- 接收集群中為當前應用程序而分配的計算資源 Executor 的注冊並管理 Executors;
- 負責發送 Task 到具體的 Executor 執行
補充說明的是SparkDeploySchedulerBackend 是被TaskSchedulerImpl 來管理的!
创建 SparkContext 的核心对象