商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 系统应用 > 如何在ServerlessK8s集群中低成本运行Spark数据计算?

如何在ServerlessK8s集群中低成本运行Spark数据计算?

  发布于2026-08-20 阅读(0)

扫一扫,手机访问

导读:本节课主要介绍如何在 Serverless Kubernetes 集群中低成本运行 Spark 数据计算。首先简单介绍下阿里云 Serverless Kubernetes 和 弹性容器实例 ECI 这两款产品;然后介绍 Spark on Kubernetes;最后进行实际演示。

产品介绍

阿里云弹性容器实例 ECI

ECI 提供安全的 Serverless 容器运行服务。无需管理底层服务器,只需要提供打包好的 Docker 镜像,即可运行容器,并仅为容器实际运行消耗的资源付费。

阿里云容器服务产品族

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

Kubernetes + ECI

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

ASK(Serverless Kubernetes)+ ECI

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

Serverless Kubernetes 是以容器和 Kubernetes 为基础的 Serverless 服务,它提供了一种简单易用、极致弹性、最优成本和按需付费的 Kubernetes 容器服务,其中无需节点管理和运维,无需容量规划,让用户更关注应用而非基础设施的管理。

Spark on Kubernetes

Spark 自 2.3.0 开始试验性支持 Standalone、on YARN 以及 on Mesos 之外的新的部署方式:Running Spark on Kubernetes,如今支持已经非常成熟。

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 应用调度流程,而 Spark on Kubernetes 对此做了一定的扩展(黄色部分),实现了一个 KubernetesClusterManager。其中 **KubernetesClusterSchedulerBackend 扩展了原生的CoarseGrainedSchedulerBackend,**新增了 **ExecutorPodsLifecycleManager、ExecutorPodsAllocator 和KubernetesClient **等组件,实现了将标准的 Spark Driver 进程转换成 Kubernetes 的 Pod 进行管理。

Spark submit

在 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

Spark Operator就是为了解决在 Kubernetes 集群部署并维护 Spark 应用而开发的,Spark Operator 是经典的 CRD + Controller,即 Kubernetes Operator 的实现。

下图为 SparkApplication 状态机:

Serverless Kubernetes + ECI

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

存储选择

对于批量处理的数据源,由于集群不是基于 HDFS 的,所以数据源会有不同,需要计算与存储分离,Kubernetes 集群只负责提供计算资源。

  • 数据源的存储可以采用阿里云对象存储 OSS、阿里云分布式存储 HDFS 等。
  • 计算的临时数据、Shuffle 数据可以采用 ECI 提供的免费的 40GB 的系统盘存储空间,还可以自定义挂载阿里云数据盘、以及 CPFS/NAS 文件系统等,都拥有非常不错的性能。

实操演示

本次实操分别展示 TPC-DS 和 WordCount 两个应用,点击即可观看具体操作演示过程

Serverless 公众号,发布 Serverless 技术最新资讯,汇集 Serverless 技术最全内容,关注 Serverless 趋势,更关注你落地实践中的遇到的困惑和问题。

本文转载于:https://apiv1.oschina.net/oschinapi/blog/detail?id=4792689 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注