一、概述

SchedulerBackend 是 TaskScheduler 的调度后端接口。TaskScheduler 给 Task 分配资源实际是通过 SchedulerBackend 来完成的,SchedulerBackend 给 Task 分配完资源后将与分配给 Task 的 Executor 通信,并要求后者运行 Task。

https://weread.qq.com/web/reader/0c832fb05e12e40c8ca6190k32b321d024832bb90e89958

https://zhuanlan.zhihu.com/p/354775031
https://www.yisu.com/zixun/563198.html

1.1. LauncherBackend

当 Spark 应用程序没有在用户应用程序中运行,而是运行在单独的进程中时,用户可以在用户应用程序中使用 LauncherServer 与Spark 应用程序通信。LauncherServer 将提供 Socket 连接的服务端,与 Spark 应用程序中的 Socket 连接的客户端通信。

TaskSchedulerImpl 底层依赖 于LauncherBackend,LauncherBackend 依赖于BackendConnection,跟 LauncherServer 进行通信。

https://weread.qq.com/web/reader/0c832fb05e12e40c8ca6190ke2c32140247e2c420d92577

二、实现

2.1. CoarseGrainedSchedulerBackend

等待 CoarseGrainedExecutorBackend 进行连接的 SchedulerBackend 实现。由 CoarseGrainedSchedulerBackend 建立的CoarseGrainedExecutorBackend 进程将会一直存在,真正的 Executor 线程将在 CoarseGrainedExecutorBackend 进程中执行

2.2. LocalSchedulerBackend

local模式中的调度后端接口。在local模式下,Executor、LocalSchedulerBackend、Driver 都运行在同一个 JVM 进程中