1 Overview

因为有计划将 K8S 上的 Spark 2.2 升级到更新的版本,关于动态资源扩展,是一个比较关心的问题。

2 Comparison

先看看目前 Spark 2.4.3 里 KubernetesClusterSchedulerBackend 是怎么写的。

image_1dcmhocdohi9urj145v1l3l1dk59.png-41kB

所以说,这部分的工作在是在 Feature Work 里的,不知道 3.0 会不会有?

再来看看 Spark on K8S 分支上的。

image_1dcmhupoo8a5e2cefs3f1ahgm.png-111.7kB

看看 Spark on K8S 文档里,关于实现的设计。KubernetesExternalShuffleService 可以允许 Spark 进行动态资源分配的模式。 Executor 上的 Shuffle 服务可以把文件持久化,这样在进行 scale up 的操作的时候,这些计算文件就不会丢失了。其设计是通过在每个 node 节点上,通过 K8S 的 DaemonSet 来运行这个 shuffle 服务。

Shuffle 服务的 Pod 和 Executor Pod 通过 hostPath 共享磁盘,这样需要每个 Executor 必须知道相同 Node 上的 shuffle 服务 Pod 的 IP 地址。

spark.kubernetes.shuffle.service.labels
spark.kubernetes.shuffle.namespace

通过指定这两个参数,KubernetesClusterSchedulerBackend 可以配置 Executor Pod 连接同一个 Node 节点上 shuffle 服务。

此外 KubernetesExternalShuffleService 还实现了 K8S 的 Watch 等 API,用于错误检测,并且可以在错误发生的时候删除无效文件。

3 Summary

所以说,升级的时候需要谨慎,目前 2.2 是支持 Dynamic Resource Allocation 的,但是自从 2.3 可以支持基础 K8S 功能,目前相关 Feature 还在开发中,有兴趣的同学可以留意一下这个 JIRA

image_1dcnhcuf21h9klcg184ebnrh3j13.png-139.7kB

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐