Spark内核解析之(4)SparkContext原理分析

在 Spark 中由 SparkContext 负责与集群进行通讯、资源的申请以及任务的分配和监控等。当 Worker 节点中的 Executor 运行完毕 Task 后,Driver 同时负责将SparkContext 关闭。通常也可以使用 SparkContext 来代表驱动程序(Driver)。

下图为SparkContext 与集群交互流程图:
在这里插入图片描述
SparkContext 是用户通往 Spark 集群的唯一入口,可以用来在 Spark 集群中创建 RDD、累加器和广播变量。SparkContext 也是整个 Spark 应用程序中至关重要的一个对象,可以说是整个 Application 运行调度的核心(不包括资源调度)。

SparkContext 的核心作用是初始化 Spark 应用程序运行所需的核心组件,包括高层调度(DAGScheduler)、底层调度器(TaskScheduler)和调度器的通信终端(SchedulerBackend),同时还会负责 Spark 程序向 Cluster Manager 的注册等。
在这里插入图片描述
在实际的编码过程中,我们会先创建 SparkConf 实例,并对 SparkConf 的属性进行自定义设置,随后,将 SparkConf 作为 SparkContext 类的唯一构造参数传入来完成 SparkContext 实例对象的创建。

SparkContext 在实例化的过程中会初始化 DAGScheduler、TaskScheduler 和SchedulerBackend,当 RDD 的 action 算子触发了作业(Job)后,SparkContext 会调用 DAGScheduler 根据宽窄依赖将 Job 划分成几个小的阶段(Stage),TaskScheduler会调度每个 Stage 的任务(Task),另外,SchedulerBackend 负责申请和管理集群为当前 Application 分配的计算资源(即 Executor)。

如果我们将 Spark Application 比作汽车,那么 SparkContext 就是汽车的引擎,而 SparkConf 就是引擎的配置参数。

下图描述了 Spark-On-Yarn 模式下在任务调度期间,ApplicationMaster、Driver以及 Executor 内部模块的交互过程:
在这里插入图片描述
Driver 初始化 SparkContext 过程中 ,会分别初始化 DAGScheduler 、TaskScheduler、SchedulerBackend 以及 HeartbeatReceiver,并启动 SchedulerBackend以及 HeartbeatReceiver。SchedulerBackend 通过 ApplicationMaster 申请资源,并不断从 TaskScheduler 中拿到合适的 Task 分发到 Executor 执行。HeartbeatReceiver负责接收 Executor 的心跳信息,监控 Executor 的存活状况,并通知到 TaskScheduler。

猜你喜欢

转载自blog.csdn.net/weixin_43520450/article/details/108607599