发布于2026-08-20 阅读(0)
扫一扫,手机访问
导读:本节课主要介绍如何在 Serverless Kubernetes 集群中低成本运行 Spark 数据计算。首先简单介绍下阿里云 Serverless Kubernetes 和 弹性容器实例 ECI 这两款产品;然后介绍 Spark on Kubernetes;最后进行实际演示。
ECI 提供安全的 Serverless 容器运行服务。无需管理底层服务器,只需要提供打包好的 Docker 镜像,即可运行容器,并仅为容器实际运行消耗的资源付费。


不论是托管版的 Kubernetes(ACK)还是 Serverless 版 Kubernetes(ASK),都可以使用 ECI 作为容器资源层,其背后的实现就是借助虚拟节点技术,通过一个叫做 Virtual Node 的虚拟节点对接 ECI。

有了 Virtual Kubelet,标准的 Kubernetes 集群就可以将 ECS 和虚拟节点混部,将 Virtual Node 作为应对突发流量的弹性资源池。

Serverless 集群中没有任何 ECS worker 节点,也无需预留、规划资源,只有一个 Virtual Node,所有的 Pod 的创建都是在 Virtual Node 上,即基于 ECI 实例。

Serverless Kubernetes 是以容器和 Kubernetes 为基础的 Serverless 服务,它提供了一种简单易用、极致弹性、最优成本和按需付费的 Kubernetes 容器服务,其中无需节点管理和运维,无需容量规划,让用户更关注应用而非基础设施的管理。
Spark 自 2.3.0 开始试验性支持 Standalone、on YARN 以及 on Mesos 之外的新的部署方式:Running Spark on Kubernetes,如今支持已经非常成熟。

Spark on kubernetes 相比于 on Yarn 等传统部署方式的优势:
1. 统一资源管理:各种类型的作业均可在同一Kubernetes集群中运行,无需再为大数据作业单独维护独立的YARN集群。2. 存储限制突破:传统的计算与存储混合部署,往往会因存储扩容而导致不必要的计算扩容,反之亦然。Kubernetes将离线计算的计算和存储分离,能更灵活地应对单方面的不足。3. 弹性集群基础设施。4. 资源隔离与限制:轻松实现复杂分布式应用的资源隔离和限制,摆脱YRAN复杂的队列管理和分配。5. 容器化优势:每个应用都可通过Docker镜像打包自身依赖,运行在独立环境中,甚至包括Spark版本,应用间完全隔离。6. 大数据上云:目前大数据应用上云主要有两种方式:1)使用ECS自建YARN(不限于YARN)集群;2)购买EMR服务,目前所有云厂商均提供此类PaaS,如今又多了Kubernetes这一选择。

图中橙色部分是原生的 Spark 应用调度流程,而 Spark on Kubernetes 对此做了一定的扩展(黄色部分),实现了一个 KubernetesClusterManager。其中 **KubernetesClusterSchedulerBackend 扩展了原生的CoarseGrainedSchedulerBackend,**新增了 **ExecutorPodsLifecycleManager、ExecutorPodsAllocator 和KubernetesClient **等组件,实现了将标准的 Spark Driver 进程转换成 Kubernetes 的 Pod 进行管理。
在 Spark Operator 出现之前,在 Kubernetes 集群提交 Spark 作业只能通过 Spark submit 的方式。创建好 Kubernetes 集群,在本地即可提交作业。
作业启动的基本流程:
1、Spark会率先在K8s集群里创建Spark Driver(pod)。2、Driver启动之后,会调用K8s API来创建Executors(pods),而Executors才是执行作业的实际载体。3、当作业计算完毕,Executor Pods会自动被回收,Driver Pod则处于Completed状态(即终态),此时用户可以查看日志等相关信息。4、Driver Pod只能由用户手动清理,或者被K8s GC回收。
直接通过这种 Spark submit 的方式,参数非常不好维护,而且不够直观,尤其是当自定义参数增加的时候;此外,没有 Spark Application 的概念了,都是零散的 Kubernetes Pod 和 Service 这些基本的单元,当应用增多时,维护成本提高,缺少统一管理的机制。
Spark Operator就是为了解决在 Kubernetes 集群部署并维护 Spark 应用而开发的,Spark Operator 是经典的 CRD + Controller,即 Kubernetes Operator 的实现。

下图为 SparkApplication 状态机:

那么,如果在 Serverless Kubernetes 集群中运行 Spark,其实际上是对原生 Spark 的进一步精简。


对于批量处理的数据源,由于集群不是基于 HDFS 的,所以数据源会有不同,需要计算与存储分离,Kubernetes 集群只负责提供计算资源。
本次实操分别展示 TPC-DS 和 WordCount 两个应用,点击即可观看具体操作演示过程
Serverless 公众号,发布 Serverless 技术最新资讯,汇集 Serverless 技术最全内容,关注 Serverless 趋势,更关注你落地实践中的遇到的困惑和问题。
上一篇:植树节,种个二叉树吧
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
4
5
6
7
8
9