Spark 2.2/2.3/2.4 的 Dynamic Resource Allocation

时间:2022-07-22
本文章向大家介绍Spark 2.2/2.3/2.4 的 Dynamic Resource Allocation,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

文章目录

1 Overview

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

2 Comparison

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

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

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

看看 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