本課主題
- 什么是 Spark 的天堂之门
- Spark 天堂之门到底在那里
- Spark 天堂之门源码鉴赏
引言
我说的 Spark 天堂之门就是SparkContext,这篇文章会从 SparkContext 建立3大核心对象 TaskSchedulerImpl、DAGScheduler 和 SchedulerBackend 开始到注册给 Master 这个过程当中的源码鉴赏,SparkContext 是整个 Spark 程序通往集群的惟一通道,它是程序起点,也是程序终点,因此我把它称之为天堂之门,看过 Spark HelloWorld 程序的朋友都知道,你在程序的开头必需先定义SparkContext、接著调用 SparkContext 的方法,好比说 sc.textFile(file),最后也会调用 sc.stop( ) 来退出应用程序。如今咱们就来看看 SparkContext 里面到底有什么密码,以及为何它会被称为天堂之门。但愿这篇文章能为读者带出如下的启发:编程
- 了解在 SparkContext 内部建立了那些实例对象以及如何建立
- 了解真正是那个实例对象向 Master 注册以及如何注册
什么是 Spark 的天堂之门
- Spark 程序在运行的时候分为 Driver 和 Executor 两部分
- Spark 程序编写是基于 SparkContext 的,具体来讲包含两方面
- Spark 编程的核心 基础-RDD 是由 SparkContext 来最初建立的(第一个RDD必定是由 SparkContext 来建立的)
- Spark 程序的调度优化也是基于 SparkContext,首先进行调度优化。
- Spark 程序的注册时经过 SparkContext 实例化时候生产的对象来完成的(实际上是 SchedulerBackend 来注册程序)
- Spark 程序在运行的时候要经过 Cluster Manager 获取具体的计算资源,计算资源获取也是经过 SparkContext 产生的对象来申请的(实际上是 SchedulerBackend 来获取计算资源的)
- SparkContext 崩溃或者结束的时候整个 Spark 程序也结束啦!
Spark 天堂之门到底在那里
运行一个程序,你会看见 SparkContext 从程序开始到结束都有它的身影,SparkContext 是 Spark 应用程序的核心呀!大数据
[下图是一个 HelloWord 应用程序在 IDEA 中的运行情况]优化


Spark 天堂之门源码鉴赏
此次主要是看当提交Spark程序后,在 SparkContext 实例化的过程当中,里面会建立多少个核心实例来为应用程序完成注冊,SparkContext 最主要的是实例化 TaskSchedulerImpl。spa
[下图是 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 來管理的!scala
建立 SparkContext 的核心对象
总结
SparkContext 开启了天堂之门:Spark 程序是经过 SparkContext 发布到 Spark集群的SparkContext 导演了天堂世界:Spark 程序运行都是在 SparkContext 为核心的调度器的指挥下进行的:SparkContext 关闭了天堂之门:SparkContext 崩溃或者结束的是偶整个 Spark 程序也结束啦!对象
參考資料
资料来源来至 DT大数据梦工厂 大数据传奇行动 第28课:Spark天堂之门解密视频blog
Spark源码图片取自于 Spark 1.6.0版本