Skip to content

EKS 上的 Spark 深入指南 ​

审查基线:Apache Spark 4.2.0,Kubernetes 1.34 或更高版本
最后审阅日期:2026 年 9 月 12 日

Apache Spark 可运行批处理、SQL、流处理和其他分布式数据工作负载。 Spark 从 2.3 开始支持原生 Kubernetes;客户端模式支持则从 2.4 开始。 Spark 4.2.0 文档将 Kubernetes 1.34+ 列为前置条件。 应使用与实际 EKS 版本兼容的 kubectl,而不要依赖过时的固定最低版本。

Spark 可以使用你已经运行的 Kubernetes 容量和控制平面,无需额外部署 Spark Standalone master 或 YARN ResourceManager。你仍需运维或预置节点容量、镜像、身份、网络、存储和可观测性。 YARN ResourceManager/NodeManager 是 YARN 组件,并非 Spark 专属守护进程。

执行职责 ​

在 cluster 部署模式下,提交客户端会请求 Kubernetes API 创建 driver Pod。Kubernetes admission、scheduler 和节点 kubelet 负责 Pod 的放置与启动。Spark driver 请求 executor Pod,并协调 Spark stage/task;它不会取代 Kubernetes scheduler。

Executor 会注册到 driver,并直接与 driver 通信以执行 Spark 工作。Kubernetes 继续管理它们的 Pod 生命周期。在 client 模式下,driver 与提交应用一起运行,可以位于 Pod 内或其他主机上;executor 必须能够访问它。两种模式都支持 Spark 应用。

Cluster 模式下通过 Kubernetes API 提交 Spark 作业;Pod 放置与启动和 driver 的 Spark 任务协调各自独立。

Cluster 模式下通过 Kubernetes API 提交 Spark 作业;Pod 放置与启动和 driver 的 Spark 任务协调各自独立。全屏打开 ↗

各章节 ​

  1. Kubernetes 上的 Spark 基础知识:cluster/client 提交、资源映射、动态分配和 decommission 条件。
  2. Spark Operator:区分 Apache 和 Kubeflow Operator,以及它们的 API、作业生命周期、提交和监控。
  3. EKS 上的 EMR:虚拟集群、作业提交和执行身份;区分托管运行时功能与 EKS 容量运维。
  4. 性能和成本:shuffle/存储/CPU/内存瓶颈、合适的节点能力、Spot 恢复,以及 executor 与节点扩缩容。
  5. 最佳实践与安全:Kubernetes 和 AWS 身份、数据访问、事件日志/历史记录、指标、网络策略和恢复。

Spark 动态资源分配会调整应用内的 executor 数量。它与 Kubernetes 面向设备的 Dynamic Resource Allocation 以及节点自动扩缩容不同。Decommission 可以减少重新计算,但不能保证强制终止时每个 block 都能保留。

参考资料 ​

测验 ​

Spark 基础知识测验

向文档提问

按 Enter 发送,按 Shift+Enter 换行。