> For the complete documentation index, see [llms.txt](https://doc.cncf.vip/kubernetes-handbook/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://doc.cncf.vip/kubernetes-handbook/ling-yu-ying-yong/big-data/spark-on-kubernetes.md).

# Spark 与 Kubernetes

Spark 原生支持 standalone、mesos 和 YARN 的调度方式，当前 kubernetes 社区正在支持 kubernetes 的原生调度来运行 spark。当然您也可以在 Kubernetes 直接部署 spark on YARN 或者 spark standalone 模式。

## Spark Standalone

使用 spark standalone 模式在 Kubernetes 上运行，kubernetes 不负责 spark 任务的调度。这种模式中使用的 spark 本身负责任务调度，kubernetes 只是作为一个 spark 的部署平台。

## Spark on Yarn

使用 StatefulSet 和 Headless serverless 来实现。这种模式中 kubernetes 依然不负责 spark 应用的调度，而只是将 Yarn 换了一个部署环境而已。

下面是架构图：

![Spark on yarn with kubernetes](https://4227727852-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FgrbEKquD93OLsW4hFlF6%2Fuploads%2Fgit-blob-214c96a16dcd89ed9d84e559d300706b2da289c8%2Fspark-on-yarn-with-kubernetes.png?alt=media)

### Spark on Kubernetes

Spark on kubernetes，使用 kubernetes 作为调度引擎，spark 的任务直接调度到 node 节点上。参考：[运行支持 kubernetes 原生调度的 Spark 程序](/kubernetes-handbook/ling-yu-ying-yong/big-data/spark-on-kubernetes/running-spark-with-kubernetes-native-scheduler.md)。

### 调度方式总结

下图显示的是三种调度方式中单个 kubernetes node 节点上运行的 spark 相关容器的调度情况。

![在 kubernetes 上使用多种调度方式](https://4227727852-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FgrbEKquD93OLsW4hFlF6%2Fuploads%2Fgit-blob-823ebb14f56bcfd3318ff569e78a62aa1b65b6a3%2Fspark-on-kubernetes-with-different-schedulers.jpg?alt=media)

毫无疑问，使用 kubernetes 原生调度的 spark 任务才是最节省资源的。
