External Shuffle Service存在的问题
从社区的讨论看,目前的Shuffle架构(External Shuffle Service)主要存在以下几个问题。
单点性能瓶颈
当单台主机上运行较多的executor时,大量Shuffle File的并发读写速度将受制于单台主机磁盘和网络的速度,
单点故障
Shuffle File存储在本地磁盘,没有备份。当所在主机故障时,所有Spark程序存储在该主机的Shuffle File都要重新计算。代价很高。
不适应容器化的部署形态
当Spark在容器化环境运行时,所有executor都需要挂载所在主机的External Shuffle Service容器的存储卷。而k8s集群的管理员出于各种考虑,也许并不允许这种部署方式。
存算分离
存算分离是目前大规模分布式系统的一个架构演进趋势。但是当前的Shuffle Service架构无法将Shuffle File存储到高性价比的外部存储中。
解决方案
针对以上问题,社区讨论了下一代Shuffle Service(RemoteShuffleService)要实现的几个目标:
- Shuffle File存储无单点故障
- Shuffle File可以存储到executor节点之外的位置
- 能够在k8s上使用,即Spark运行在k8s上时可以启用dynamic allocation。
目前实现以上目标的路线有两条:
- 基于ShuffleManager接口实现新的ShuffleManager。
- 继续使用SortShuffleManager。抽象出一套新的ShuffleReader/Writer的接口。