Spark2.4-Dynamic-Resource-Allocation
概述
因为有计划将 K8S 上的 Spark 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 地址。
|
|
通过指定这两个参数,KubernetesClusterSchedulerBackend
可以配置 Executor Pod 连接同一个 Node 节点上 shuffle 服务。此外 KubernetesExternalShuffleService
还实现了 K8S 的 Watch 等 API,用于错误检测,并且可以在错误发生的时候删除无效文件。
总结
所以说,升级的时候需要谨慎,目前 2.2 是支持 Dynamic Resource Allocation 的,但是自从 2.3 可以支持基础 K8S 功能,目前相关 Feature 还在开发中,有兴趣的同学可以留意一下这个 JIRA。
