Spark 中的 Master-Worker 与 Driver-Executor
(脑子离家出走系列:是用于记录因 间歇性脑子离家出走,而导致忘记的基础知识系列)
Master 节点与 Worker 节点
一个 Spark 集群中拥有多个 Master 节点和 Worker 节点,一台机器既可以是 Master,也可以是 Worker,同时根据部署模式的不同,这两个角色的数量也不同,至于节点名称的解释可以理解为 Master 节点有一个 Master 进程,负责管理 Worker 节点,spark-submit 都是从 Master 节点提交;同理,Worker 节点中有一个 Worker 进程,与 Master 节点通信,管理 Executor。
Driver 进程与 Executor 进程
这俩玩意儿就稍微有点复杂了,我尽量描述得简单一点。
Driver 进程: Driver 进程本身可以运行在 Master 或者 Worker 上(如果部署模式是 On-Yarn,就不存在 Master 和 Worker 了),Driver 会将我们的编写的 Spark 应用拆分为多个 Stage,Stage 又会创建一批 Task,Task分配到 Executor 中执行;同时 Driver 又去资源管理器申请资源给 Executor,用于执行 Task。
(PS:Stage 拆分后面另起一篇博客笔记记录)
Executor 进程: 运行在 Worker 中(同上,如果是 On-Yarn 就没有 Worker),每个 Executor 持有一个线程池,每个线程池可以执行一个 Task,Executor 负责将执行结果返回给 Driver。同时,在执行过程中,Executor 会缓存执行期间的数据,利用缓存提高执行效率。
结构图
大致作图,不代表实际架构,只是用于理解以上内容。
(前提:Driver 部署在 Master 节点上,Executor 部署在 Worker 节点上,Cluster Manager 不限于 Standalone 模式,也有 Yarn,只是表示一个管理器而已)
拆分任务
这里不涉及到 Master 和 Worker,只有 Driver 和 Executor。