在 Kubernetes(K8s)中,Pod 是最小的可调度单元。当 Spark 任务运行在 K8s 上时,无论是 Driver 还是 Executor 都由一个单独的 Pod 来表示。每个 Pod 都被分配了一个唯一的 IP 地址,并且可以包含一个或多个容器(Container)。Driver 和 Executor 的 JVM 进程都是在这些 Container 中启动、运行和销毁的。
当一个 Spark 作业被提交到 K8s 集群后,首先会被启动的是 Driver Pod。然后,Driver 负责按需向 Apiserver 请求创建 Executor Pods。Executor 负责执行具体的 Task。一旦作业完成,Driver 将负责清理所有已创建的 Executor Pods。以下是一个简要的关系示意图:
- 用户通过
spark-submit向 K8s 集群提交 Spark 作业。 - K8s 集群中的 Master Node 接收请求并创建 Driver Pod。
- Driver Pod 内部启动 Driver JVM 进程。
- Driver JVM 进程根据作业需求向 Apiserver 请求创建 Executor Pods。
- Apiserver 分配资源并创建 Executor Pods。
- Executor Pods 内部启动 Executor JVM 进程。
- Executor JVM 进程执行具体的 Task。
- 作业完成后,Driver JVM 进程通知 Apiserver 清理所有的 Executor Pods。
- Apiserver 确认并释放 Executor Pods 所占用的资源。
- Driver Pod 完成其使命后,也会被清理。
这种设计使得 Spark 可以无缝地集成到 K8s 环境中,利用 K8s 的弹性伸缩和资源管理能力来高效地运行大数据处理作业。



被折叠的 条评论
为什么被折叠?



