DataProc集群中Spark无磁盘耗尽异常:谁清理Shuffle数据?
谁在清理你的Spark Shuffle数据?
当你启用**External Shuffle Service(ESS)**后,集群各节点上的ESS进程是负责Shuffle数据清理的核心角色,而非Executor或Driver进程,具体逻辑如下:
- Executor的角色变化:启用ESS后,Executor仅负责生成Shuffle文件,并将文件的元数据注册到本地的ESS进程,之后Executor不再拥有Shuffle文件的管理权,也不会主动清理这些文件——哪怕Executor重启,ESS也会保留仍被需要的Shuffle文件。
- ESS的清理机制:
- DataProc默认开启ESS的自动清理功能(对应配置
spark.shuffle.service.cleanup.enabled=true),ESS会定期扫描本地磁盘上的Shuffle文件。 - 它会清理两类文件:一是已经完成的Stage对应的、不再被任何后续任务引用的Shuffle数据;二是超过配置的最大保留时长(
spark.shuffle.service.cleanup.max.age,默认1小时)的文件。 - 这种定期清理机制保证了即使你的应用持续生成Shuffle数据,磁盘空间也不会被持续耗尽——你在Spark UI看到的“聚合Shuffle数据”是历史累计值,而非当前磁盘实际占用的实时值。
- DataProc默认开启ESS的自动清理功能(对应配置
- Driver的角色:Driver仅负责任务的调度和Stage的生命周期管理,不会直接参与节点本地Shuffle文件的清理工作。
这就是为什么你的集群磁盘没有被Shuffle数据占满,任务能正常运行的原因。
内容的提问来源于stack exchange,提问作者user3103957
相关产品推荐
相关产品推荐

